<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <link title="Purple" rel="stylesheet" href="manual-purple.css" type="text/css">
  <link title="Minty" rel="alternate stylesheet" href="manual-minty.css" type="text/css">
  <link title="Plain" rel="alternate stylesheet" href="manual.css" type="text/css">
  <title>openMSX Console Command Reference</title>
</head>

<body>
  <h1>openMSX Console Command Reference</h1>

  <ol class="inlinetoccat">
    <li><a class="internal" href="#introduction">Introduction</a></li>
    <li><a class="internal" href="#commands">Commands</a>

      <ol class="inlinetoc">
        <li><a class="internal" href="#after">after</a></li>
        <li><a class="internal" href="#bind">bind / unbind / bind_default / unbind_default / activate_input_layer / deactivate_input_layer</a></li>
        <li><a class="internal" href="#cart">cart / cart&lt;x&gt;</a></li>
        <li><a class="internal" href="#cassetteplayer">cassetteplayer</a></li>
        <li><a class="internal" href="#cd">cd&lt;x&gt;</a></li>
        <li><a class="internal" href="#cycle">cycle / cycle_back</a></li>
        <li><a class="internal" href="#debug">debug</a></li>
        <li><a class="internal" href="#disk">disk&lt;x&gt; / virtual_drive</a></li>
        <li><a class="internal" href="#diskmanipulator">diskmanipulator</a></li>
        <li><a class="internal" href="#escape_grab">escape_grab</a></li>
        <li><a class="internal" href="#exit">exit</a></li>
        <li><a class="internal" href="#ext">ext / ext&lt;x&gt;</a></li>
        <li><a class="internal" href="#filepool">filepool</a></li>
        <li><a class="internal" href="#findcheat">findcheat</a></li>
        <li><a class="internal" href="#hd">hd&lt;x&gt;</a></li>
        <li><a class="internal" href="#help">help</a></li>
        <li><a class="internal" href="#incr">incr</a></li>
        <li><a class="internal" href="#iomap">iomap</a></li>
        <li><a class="internal" href="#keymatrix">keymatrixdown / keymatrixup</a></li>
        <li><a class="internal" href="#laserdiscplayer">laserdiscplayer</a></li>
        <li><a class="internal" href="#list_extensions">list_extensions</a></li>
        <li><a class="internal" href="#load_icons">load_icons</a></li>
        <li><a class="internal" href="#load_settings">load_settings</a></li>
        <li><a class="internal" href="#machine">machine</a></li>
        <li><a class="internal" href="#machines">create_machine / load_machine / activate_machine / list_machines / delete_machine</a></li>
        <li><a class="internal" href="#machine_info">machine_info</a></li>
        <li><a class="internal" href="#message">message</a></li>
        <li><a class="internal" href="#monitor_type">monitor_type</a></li>
        <li><a class="internal" href="#mute_channels">mute_channels / unmute_channels / solo</a></li>
        <li><a class="internal" href="#nowind">nowind&lt;x&gt;</a></li>
        <li><a class="internal" href="#openmsx_info">openmsx_info</a></li>
        <li><a class="internal" href="#openmsx_update">openmsx_update</a></li>
        <li><a class="internal" href="#osd">osd</a></li>
        <li><a class="internal" href="#palette">palette</a></li>
        <li><a class="internal" href="#plugunplug">plug / unplug</a></li>
        <li><a class="internal" href="#psg_profile">psg_profile</a></li>
        <li><a class="internal" href="#record">record</a></li>
        <li><a class="internal" href="#record_channels">record_channels</a></li>
        <li><a class="internal" href="#remove_extension">remove_extension</a></li>
        <li><a class="internal" href="#reset">reset</a></li>
        <li><a class="internal" href="#reverse">reverse</a></li>
        <li><a class="internal" href="#save_settings">save_settings</a></li>
        <li><a class="internal" href="#savestate">savestate / loadstate / list_savestates / delete_savestate</a></li>
        <li><a class="internal" href="#screenshot">screenshot</a></li>
        <li><a class="internal" href="#set">set</a></li>
        <li><a class="internal" href="#slotmap">slotmap</a></li>
        <li><a class="internal" href="#slotselect">slotselect</a></li>
        <li><a class="internal" href="#soundlog">soundlog</a></li>
        <li><a class="internal" href="#store_machine">store_machine / restore_machine</a></li>
        <li><a class="internal" href="#test_machine">test_machine</a></li>
        <li><a class="internal" href="#toggle">toggle</a></li>
        <li><a class="internal" href="#trainer">trainer</a></li>
        <li><a class="internal" href="#type">type / type_via_keyboard</a></li>
        <li><a class="internal" href="#unset">unset</a></li>
        <li><a class="internal" href="#user_setting">user_setting</a></li>
        <li><a class="internal" href="#vdpregs">vdpregs</a></li>
        <li><a class="internal" href="#other">other</a></li>
      </ol>
    </li>

    <li><a class="internal" href="#settings">Settings</a>

      <ol class="inlinetoc">
        <li><a class="internal" href="#accuracy">accuracy</a></li>
        <li><a class="internal" href="#audio-inputfilename">audio-inputfilename</a></li>
        <li><a class="internal" href="#autoruncassettes">autoruncassettes</a></li>
        <li><a class="internal" href="#autorunlaserdisc">autorunlaserdisc</a></li>
        <li><a class="internal" href="#auto_enable_reverse">auto_enable_reverse</a></li>
        <li><a class="internal" href="#auto_save_replay">auto_save_replay</a></li>
        <li><a class="internal" href="#blur">blur</a></li>
        <li><a class="internal" href="#bootsector">bootsector</a></li>
        <li><a class="internal" href="#brightness">brightness</a></li>
        <li><a class="internal" href="#cmdtiming">cmdtiming</a></li>
        <li><a class="internal" href="#color_matrix">color_matrix</a></li>
        <li><a class="internal" href="#console">console</a></li>
        <li><a class="internal" href="#consolebackground">consolebackground</a></li>
        <li><a class="internal" href="#consolecolumns">consolecolumns</a></li>
        <li><a class="internal" href="#consolefont">consolefont</a></li>
        <li><a class="internal" href="#consolefontsize">consolefontsize</a></li>
        <li><a class="internal" href="#console_history_size">console_history_size</a></li>
        <li><a class="internal" href="#consoleplacement">consoleplacement</a></li>
        <li><a class="internal" href="#consolerows">consolerows</a></li>
        <li><a class="internal" href="#console_remove_doubles">console_remove_doubles</a></li>
        <li><a class="internal" href="#contrast">contrast</a></li>
        <li><a class="internal" href="#cputrace">cputrace</a></li>
        <li><a class="internal" href="#debugoutput">debugoutput</a></li>
        <li><a class="internal" href="#default_machine">default_machine</a></li>
        <li><a class="internal" href="#deflicker">deflicker</a></li>
        <li><a class="internal" href="#deinterlace">deinterlace</a></li>
        <li><a class="internal" href="#DirAsDSKmode">DirAsDSKmode</a></li>
        <li><a class="internal" href="#disablesprites">disablesprites</a></li>
        <li><a class="internal" href="#display_deform">display_deform</a></li>
        <li><a class="internal" href="#di_halt_callback">di_halt_callback</a></li>
        <li><a class="internal" href="#enable_session_management">enable_session_management</a></li>
        <li><a class="internal" href="#frequency">frequency</a></li>
        <li><a class="internal" href="#firmwareswitch">firmwareswitch</a></li>
        <li><a class="internal" href="#fullscreen">fullscreen</a></li>
        <li><a class="internal" href="#fullspeedwhenloading">fullspeedwhenloading</a></li>
        <li><a class="internal" href="#gamma">gamma</a></li>
        <li><a class="internal" href="#glow">glow</a></li>
        <li><a class="internal" href="#grabinput">grabinput</a></li>
        <li><a class="internal" href="#horizontal_stretch">horizontal_stretch</a></li>
        <li><a class="internal" href="#inputdelay">inputdelay</a></li>
        <li><a class="internal" href="#interleave_black_frame">interleave_black_frame</a></li>
        <li><a class="internal" href="#invalid_ppi_mode_callback">invalid_ppi_mode_callback</a></li>
        <li><a class="internal" href="#invalid_psg_directions_callback">invalid_psg_directions_callback</a></li>
        <li><a class="internal" href="#joystickN_config">joystick&lt;n&gt;_config</a></li>
        <li><a class="internal" href="#joystickN_deadzone">joystick&lt;n&gt;_deadzone</a></li>
        <li><a class="internal" href="#kbd_auto_toggle_code_kana_lock">kbd_auto_toggle_code_kana_lock</a></li>
        <li><a class="internal" href="#kbd_code_kana_host_key">kbd_code_kana_host_key</a></li>
        <li><a class="internal" href="#kbd_deadkey1_host_key">kbd_deadkey1_host_key</a></li>
        <li><a class="internal" href="#kbd_deadkey2_host_key">kbd_deadkey2_host_key</a></li>
        <li><a class="internal" href="#kbd_deadkey3_host_key">kbd_deadkey3_host_key</a></li>
        <li><a class="internal" href="#kbd_mapping_mode">kbd_mapping_mode</a></li>
        <li><a class="internal" href="#kbd_numkeypad_always_enabled">kbd_numkeypad_always_enabled</a></li>
        <li><a class="internal" href="#kbd_numkeypad_enter_key">kbd_numkeypad_enter_key</a></li>
        <li><a class="internal" href="#kbd_trace_key_presses">kbd_trace_key_presses</a></li>
        <li><a class="internal" href="#keyjoystick_n_button">keyjoystick&lt;n&gt;.&lt;button&gt;</a></li>
        <li><a class="internal" href="#led">led_&lt;name&gt;</a></li>
        <li><a class="internal" href="#limitsprites">limitsprites</a></li>
        <li><a class="internal" href="#master_volume">master_volume</a></li>
        <li><a class="internal" href="#maxframeskip">maxframeskip</a></li>
        <li><a class="internal" href="#midi-in-readfilename">midi-in-readfilename</a></li>
        <li><a class="internal" href="#midi-out-logfilename">midi-out-logfilename</a></li>
        <li><a class="internal" href="#minframeskip">minframeskip</a></li>
        <li><a class="internal" href="#mode">mode</a></li>
        <li><a class="internal" href="#mute">mute</a></li>
        <li><a class="internal" href="#noise">noise</a></li>
        <li><a class="internal" href="#pause">pause</a></li>
        <li><a class="internal" href="#pause_on_lost_focus">pause_on_lost_focus</a></li>
        <li><a class="internal" href="#pointer_hide_delay">pointer_hide_delay</a></li>
        <li><a class="internal" href="#power">power</a></li>
        <li><a class="internal" href="#printerlogfilename">printerlogfilename</a></li>
        <li><a class="internal" href="#print-resolution">print-resolution</a></li>
        <li><a class="internal" href="#r800_freq">r800_freq / r800_freq_locked</a></li>
        <li><a class="internal" href="#renderer">renderer</a></li>
        <li><a class="internal" href="#renshaturbo">renshaturbo</a></li>
        <li><a class="internal" href="#resampler">resampler</a></li>
        <li><a class="internal" href="#rs232-inputfilename">rs232-inputfilename</a></li>
        <li><a class="internal" href="#rs232-outputfilename">rs232-outputfilename</a></li>
        <li><a class="internal" href="#rtcmode">rtcmode</a></li>
        <li><a class="internal" href="#samples">samples</a></li>
        <li><a class="internal" href="#save_settings_on_exit">save_settings_on_exit</a></li>
        <li><a class="internal" href="#scale_algorithm">scale_algorithm</a></li>
        <li><a class="internal" href="#scale_factor">scale_factor</a></li>
        <li><a class="internal" href="#scanline">scanline</a></li>
        <li><a class="internal" href="#sound_driver">sound_driver</a></li>
        <li><a class="internal" href="#speed">speed</a></li>
        <li><a class="internal" href="#soundchip_balance">&lt;soundchip&gt;_balance</a></li>
        <li><a class="internal" href="#soundchip_channel_record">&lt;soundchip&gt;_ch&lt;channel&gt;_record</a></li>
        <li><a class="internal" href="#soundchip_channel_mute">&lt;soundchip&gt;_ch&lt;channel&gt;_mute</a></li>
        <li><a class="internal" href="#soundchip_detune_frequency">&lt;soundchip&gt;_detune_frequency</a></li>
        <li><a class="internal" href="#soundchip_detune_percent">&lt;soundchip&gt;_detune_percent</a></li>
        <li><a class="internal" href="#soundchip_vibrato_frequency">&lt;soundchip&gt;_vibrato_frequency</a></li>
        <li><a class="internal" href="#soundchip_vibrato_percent">&lt;soundchip&gt;_vibrato_percent</a></li>
        <li><a class="internal" href="#soundchip_volume">&lt;soundchip&gt;_volume</a></li>
        <li><a class="internal" href="#sync_to_vblank_mode">sync_to_vblank_mode</a></li>
        <li><a class="internal" href="#throttle">throttle</a></li>
        <li><a class="internal" href="#too_fast_vram_access">too_fast_vram_access</a></li>
        <li><a class="internal" href="#too_fast_vram_access_callback">too_fast_vram_access_callback</a></li>
        <li><a class="internal" href="#touchpad_transform_matrix">touchpad_transform_matrix</a></li>
        <li><a class="internal" href="#turborpause">turborpause</a></li>
        <li><a class="internal" href="#umr_callback">umr_callback</a></li>
        <li><a class="internal" href="#vdpcmdinprogress_callback">vdpcmdinprogress_callback</a></li>
        <li><a class="internal" href="#vdpcmdtrace">vdpcmdtrace</a></li>
        <li><a class="internal" href="#videosource">videosource</a></li>
        <li><a class="internal" href="#v9990cmdtrace">v9990cmdtrace</a></li>
        <li><a class="internal" href="#z80_freq">z80_freq / z80_freq_locked</a></li>
        <li><a class="internal" href="#othersettings">other</a></li>
      </ol>
    </li>
  </ol>

  <h2><a id="introduction">Introduction</a></h2>

  <p>This manual describes all commands and settings which are available in openMSX. You can use them to control openMSX fully from the Console (a built in command line interface, use F10 to call it), via Tcl scripts and via remote connections (explained in <a class="external" href="openmsx-control.html">Controlling openMSX from External Applications</a>). If you want to unleash the full potential of openMSX or just want a reference of all available possibilities, this manual should serve you well.</p>

  <h2><a id="commands">Commands</a></h2>

  <h3><a id="after">after</a></h3>

  <p>Execute a command after a certain event occurs, for example a given amount of time has passed or the emulator has been idle for a given amount of time.
  Every postponed command executes just once; if you want a command to run periodically, you have to issue it again every time it runs.
  The <code>after</code> command returns the id of the postponed command.
  It is possible to query a list of
  postponed commands and also to cancel postponed commands.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>after time &lt;seconds&gt; &lt;command&gt;</code></td>

      <td>Execute a command after some time. Timescale is in MSX seconds.</td>
    </tr>

    <tr>
      <td><code>after realtime &lt;seconds&gt; &lt;command&gt;</code></td>

      <td>Execute a command after some time. Timescale is in host seconds.</td>
    </tr>

    <tr>
      <td><code>after idle &lt;seconds&gt; &lt;command&gt;</code></td>

      <td>Execute a command after some time being idle</td>
    </tr>

    <tr>
      <td><code>after frame &lt;command&gt;</code></td>

      <td>Execute a command when a video frame is finished
      (VDP scanning reaches vsync)</td>
    </tr>

    <tr>
      <td><code>after break &lt;command&gt;</code></td>

      <td>Execute a command after a breakpoint is reached</td>
    </tr>

    <tr>
      <td><code>after boot &lt;command&gt;</code></td>

      <td>Execute a command after a (re)boot</td>
    </tr>

    <tr>
      <td><code>after machine_switch &lt;command&gt;</code></td>

      <td>Execute a command after switch to new a machine</td>
    </tr>

    <tr>
      <td><code>after &lt;input-event&gt; &lt;command&gt;</code></td>

      <td>Execute a command after the given input event occurs. The events are e.g. mouse, joystick, focus and resize events, the same ones as for the <a class="internal" href="#bind">bind</a> command.</td>
    </tr>

    <tr>
      <td><code>after info</code></td>

      <td>List all postponed commands</td>
    </tr>

    <tr>
      <td><code>after cancel &lt;id&gt;</code></td>

      <td>Cancel the postponed command with given id</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>after time 2.6 "set renderer SDLGL-PP"</code><br />
    <code>after idle 100 exit</code><br />
    <code>after info</code><br />
    <code>after cancel after#2</code><br />
    <code>after "mouse button1 down" foo</code>
  </div>

  <h3><a id="bind">bind / unbind / bind_default / unbind_default / activate_input_layer / deactivate_input_layer</a></h3>

  <p>Associate events (such as key presses) with commands. Whenever the
  specified event occurs (e.g. you press the specified key), the corresponding
  command will be executed. Any Tcl command or combination of commands
  separated with <code>;</code> (normal Tcl syntax) can be used. To customize your
  bindings you should use the (un)bind commands. A script that wants to provide
  a default binding for its functionality needs to use <code>bind_default</code>,
  this allows users with different preferences to overrule the default
  bindings. Using the <code>-repeat</code> option makes sure that if the event is
  repeated (e.g. keyboard events when keeping a key pressed), the command is
  repeated as well.</p>

  <p>Tcl scripts that need a whole set of bindings and only conditionally
  activate those bindings can use the 'input layer' system. It's possible to
  associate a binding with a specific layer and later specific layer(s) can be
  activated or deactivated. Such a layer can also be activated in a blocking
  mode. Blocking mode means that even if the layer didn't have a binding for a
  certain event, that event is still not passed to the emulated MSX. This can
  be useful to implement certain OSD widgets (like a virtual OSD keyboard).</p>

  <p>Events can be:</p>

  <table>
    <tr>
      <td><code>&lt;key&gt;[,release]</code></td>
      <td>Short for <code>keyb &lt;key&gt;[,release]</code></td>
    </tr>
    <tr>
      <td><code>keyb &lt;key&gt;[,release]</code></td>
      <td>&lt;key&gt; is pressed [or released]</td>
    </tr>
    <tr>
      <td><code>mouse button&lt;n&gt; &lt;up/down&gt;</code></td>
      <td>Mouse button &lt;n&gt; went up or down</td>
    </tr>
    <tr>
      <td><code>mouse motion &lt;x&gt; &lt;y&gt;</code></td>
      <td>Mouse motion of &lt;x&gt; and &lt;y&gt;</td>
    </tr>
    <tr>
      <td><code>joy&lt;n&gt; button&lt;m&gt; &lt;up/down&gt;</code></td>
      <td>Button &lt;m&gt; of joystick &lt;n&gt; went up/down</td>
    </tr>
    <tr>
      <td><code>joy&lt;n&gt; axis&lt;m&gt; &lt;value&gt;</code></td>
      <td>Axis &lt;m&gt; of joystick &lt;n&gt; got value &lt;value&gt;</td>
    </tr>
    <tr>
      <td><code>focus &lt;boolean&gt;</code></td>
      <td>The openMSX window got (1) or lost (0) focus</td>
    </tr>

    <tr>
      <td><code>OSDcontrol &lt;button&gt; PRESS|RELEASE</code></td>

      <td>The virtual OSDcontrol &lt;button&gt; got pressed or released.</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>bind</code></td>
      <td>Show all bindings</td>
    </tr>
    <tr>
      <td><code>bind -layer &lt;layername&gt;</code></td>
      <td>Show all in a specific layer</td>
    </tr>
    <tr>
      <td><code>bind &lt;event&gt; [-layer &lt;layername&gt;]</code></td>
      <td>Show binding for the given event, optionally you can specify a layer</td>
    </tr>
    <tr>
      <td><code>bind &lt;event&gt; [-layer &lt;layername&gt;] [-repeat] &lt;command&gt;</code></td>
      <td>Make a new binding. Optionally make this binding in a specific layer.
      Also optionally it's possible to retrigger this binding periodically
      (e.g. when a key is kept pressed).</td>
    </tr>
    <tr>
      <td><code>bind -layers</code></td>
      <td>Show the names of all layers that currently have bindings</td>
    </tr>
    <tr>
      <td><code>unbind [-layer &lt;layername&gt;] &lt;event&gt;</code></td>
      <td>Undo binding for this event (optionally in a specific layer).</td>
    </tr>
    <tr>
      <td><code>unbind -layer &lt;layername&gt;</code></td>
      <td>Undo all bindings in the specified layer</td>
    </tr>
    <tr>
      <td><code>activate_input_layer</code></td>
      <td>Show a list of the currently active layers.</td>
    </tr>
    <tr>
      <td><code>activate_input_layer [-blocking] &lt;layername&gt;</code></td>
      <td>Activate the specified input layer, optionally this layer can be
      activate in blocking mode.</td>
    </tr>
    <tr>
      <td><code>deactivate_input_layer &lt;layername&gt;</code></td>
      <td>Deactivate the specified input layer.</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>
  <div class="examples">
    <code>bind PAGEUP   "set speed 100"</code><br />
    <code>bind PAGEDOWN "set speed  50"</code><br />
    <br />
    Only run with full throttle while F9 is pressed (like BrMSX):<br />
    <code>unbind F9</code><br />
    <code>bind F9         "set throttle off"</code><br />
    <code>bind F9,release "set throttle on"</code><br />
    <br />
    Pause when window loses focus (like fMSX):<br />
    <code>bind "focus 0" "set pause on"</code><br />
    <code>bind "focus 1" "set pause off"</code><br />
    <br />
    Middle-click to toggle input grabbing:<br />
    <code>bind "mouse button2 down" "toggle grabinput"</code><br />
    <br />
    Map button 8 of joystick 1 to F2-key:<br />
    <code>bind "joy1 button8 down" "keymatrixdown 6 0x40"</code><br />
    <code>bind "joy1 button8 up"   "keymatrixup   6 0x40"</code><br />
    <br />
    Use PageUp/Down to increase/decrease emulation speed.<br/>
    <code>bind PAGEUP   -repeat "incr speed  1"</code><br />
    <code>bind PAGEDOWN -repeat "incr speed -1"</code><br />
    <br />
    Use Joystick hat left/right to increase/decrease volume.<br/>
    <code>bind "joy1 hat0 left"  -repeat "incr speed -5"</code><br />
    <code>bind "joy1 hat0 right" -repeat "incr speed  5"</code><br />
    <br />
    Toggle fullscreen with ALT and ENTER.<br/>
    <code>bind ALT+RETURN toggle fullscreen</code><br />
    <br />
    React to joystick or cursor up movement in a Tcl script:<br />
    <code>bind_default "OSDcontrol UP PRESS" -repeat {osd_menu::menu_action UP }</code><br />
    React to joystick button 1 or spacebar press in a Tcl script:<br />
    <code>bind_default "OSDcontrol A PRESS" -repeat {osd_menu::menu_action A }</code><br />
  </div>

  <h3><a id="cart">cart / cart&lt;x&gt;</a></h3>

  <p>Insert a ROM cartridge in a running MSX. The <code>cart</code> command inserts the cartridge in the first available slot. The <code>carta</code>, <code>cartb</code> etc. commands insert it in the specified slot. The cartridges can be removed again with the <code>eject</code> subcommand.</p>

  <p>ROM cartridges are a special class of extensions. For extensions that are not ROM cartridges, see the commands <code><a class="internal" href="#ext">ext</a></code>, <code><a class="internal" href="#list_extensions">list_extensions</a></code> and <code><a class="internal" href="#remove_extension">remove_extension</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>cart KMARE.ROM</code></td>
      <td>Insert ROM cartridge in first free slot</td>
    </tr>

    <tr>
      <td><code>cart insert KMARE.ROM</code></td>
      <td>Insert ROM cartridge in first free slot</td>
    </tr>

    <tr>
      <td><code>carta USAS.ROM -ips USAS.IPS</code></td>
      <td>Insert ROM cartridge in slot A, with IPS patch applied to the ROM contents</td>
    </tr>

    <tr>
      <td><code>cartb NEMESIS.ROM -romtype Konami</code></td>
      <td>Insert ROM cartridge in slot B, and explicitly specify the mapper type (is normally auto detected)</td>
    </tr>

    <tr>
      <td><code>carta eject</code></td>
      <td>Eject the currently inserted cartridge from slot A</td>
    </tr>
  </table>

  <h3><a id="cassetteplayer">cassetteplayer</a></h3>

  <p>Controls the openMSX cassette player. The various subcommands can be used to insert, remove, create and rewind tape images.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>cassetteplayer insert &lt;tape image&gt;</code></td>

      <td>Insert tape image (WAV or CAS format) in the cassette player</td>
    </tr>

    <tr>
      <td><code>cassetteplayer eject</code></td>

      <td>Remove tape from virtual cassette player</td>
    </tr>

    <tr>
      <td><code>cassetteplayer rewind</code></td>

      <td>Rewind the current tape</td>
    </tr>

    <tr>
      <td><code>cassetteplayer motorcontrol on|off</code></td>

      <td>Selects whether motor control signal (remote) is obeyed (default: on)</td>
    </tr>

    <tr>
      <td><code>cassetteplayer new [&lt;tape image&gt;]</code></td>

      <td>Create new tape image and go to record mode</td>
    </tr>

    <tr>
      <td><code>cassetteplayer play</code></td>

      <td>Go to play mode (when in record mode) and rewind the tape</td>
    </tr>
  </table>

  <h3><a id="cd">cd&lt;x&gt;</a></h3>

  <p>Change the CDROM image. The commands <code>cda</code>, <code>cdb</code> etc. are assigned to all available CDROM drives in the MSX. They will not
  correspond to drive names as used in MSX-DOS.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>cda &lt;iso image&gt;</code></td>

      <td>Use ISO image for CDROM drive "cda"</td>
    </tr>

    <tr>
      <td><code>cda insert &lt;iso image&gt;</code></td>

      <td>Use ISO image for CDROM drive "cda"</td>
    </tr>

    <tr>
      <td><code>cda eject</code></td>

      <td>Eject CDROM from CDROM drive "cda"</td>
    </tr>

    <tr>
      <td><code>cda</code></td>

      <td>Show current ISO image for CDROM drive "cda"</td>
    </tr>
  </table>


  <h3><a id="cycle">cycle / cycle_back</a></h3>

  <p>Iterates through the values of an enumerated setting.</p>

  <p><code>cycle_back</code> does the same as <code>cycle</code>, but it goes in the opposite direction.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>cycle &lt;setting&gt;</code></td>
      <td>Changes the specified setting to the next value in the cycle</td>
    </tr>
    <tr>
      <td><code>cycle_back &lt;setting&gt;</code></td>
      <td>Changes the specified setting to the previous value in the cycle</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>cycle scale_algorithm</code><br />
    <code>cycle videosource</code>
  </div>


  <h3><a id="debug">debug</a></h3>

  <p>This command provides access to the debugger functionality of openMSX. It's meant to be used by an external debugger (see also <a class="external" href="openmsx-control.html">Controlling openMSX from External Applications</a>). The general format of the debug command is:</p>

  <p><code>debug &lt;subcommand&gt; [&lt;extra arguments&gt;]</code></p>

  <p>where 'extra arguments' are specific for each subcommand. Below is a list of all subcommands:</p>

  <table>
    <tr>
      <td><code>debug list</code></td>

      <td>Return a list of all debuggables.<br />
      A debuggable is (part of) the state of a MSX device that can be accessed
      via these debug commands.<br />
      Examples are:
        <ul>
          <li> the VDP registers </li>
          <li> the currently visible memory for the Z80</li>
          <li> the contents of the RAM </li>
        </ul>
      </td>
    </tr>

    <tr>
      <td><code>debug desc &lt;name&gt;</code></td>

      <td>Return a description of this debuggable</td>
    </tr>

    <tr>
      <td><code>debug size &lt;name&gt;</code></td>

      <td>Return the size of this debuggable</td>
    </tr>

    <tr>
      <td><code>debug read &lt;name&gt; &lt;addr&gt;</code></td>

      <td>Read a byte from a debuggable</td>
    </tr>

    <tr>
      <td><code>debug write &lt;name&gt; &lt;addr&gt; &lt;val&gt;</code></td>

      <td>Write a byte to a debuggable</td>
    </tr>

    <tr>
      <td><code>debug read_block &lt;name&gt; &lt;addr&gt; &lt;size&gt;</code></td>

      <td>Read a whole block at once</td>
    </tr>

    <tr>
      <td><code>debug write_block &lt;name&gt; &lt;addr&gt; &lt;values&gt;</code></td>

      <td>Write a whole block at once</td>
    </tr>

    <tr>
      <td><code>debug probe &lt;subcommand&gt;</code></td>
      <td>See below.</td>
    </tr>

    <tr>
      <td><code>debug break</code></td>

      <td>Break CPU at current position</td>
    </tr>

    <tr>
      <td><code>debug breaked</code></td>

      <td>Query CPU break status</td>
    </tr>

    <tr>
      <td><code>debug cont</code></td>

      <td>Continue execution after break</td>
    </tr>

    <tr>
      <td><code>debug step</code></td>

      <td>Execute one instruction</td>
    </tr>

    <tr>
      <td><code>debug list_bp</code></td>

      <td>List the active breakpoints</td>
    </tr>

    <tr>
      <td><code>debug set_bp [-once] &lt;addr&gt; [&lt;cond&gt;] [&lt;cmd&gt;]</code></td>

      <td>Insert a new breakpoint at the given address. Optionally you can specify a condition and a command. When
      the CPU is about to execute the instruction at the given address, the condition will be evaluated, if this
      evaluates to true then the command is executed. The condition can be any Tcl expression and the command can be
      any Tcl command. The default condition is 'true' and the default command is <code>"debug break"</code>.
      If the <code>-once</code> flag is passed, the breakpoint is automatically removed after it triggered.
      In other words: it will only trigger once.</td>
    </tr>

    <tr>
      <td><code>debug remove_bp &lt;id&gt;</code></td>

      <td>Remove a certain breakpoint</td>
    </tr>

    <tr>
      <td><code>debug list_watchpoints</code></td>

      <td>List all defined watchpoints</td>
    </tr>

    <tr>
      <td><code>debug set_watchpoint [-once] &lt;type&gt; &lt;region&gt; [&lt;cond&gt;] [&lt;cmd&gt;]</code></td>

      <td>Insert a new watchpoint. When the CPU is about to read or write to/from the specified memory or I/O region,
      the condition is evaluated. If the condition evaluated to true, the command is executed. The -once flag, the condition and the
      command are similar to the ones in the <code>set_bp</code> subcommand. A watchpoint can either be set on a single memory
      address or I/O port (specify a single value), or on a whole memory or I/O port range (specify a begin/end pair).
      For example: <code>debug set_watchpoint write_mem {0x8000 0x8FFF}</code>. During the execution of <code>&lt;cmd&gt;</code>, the following global Tcl variables are set: <code>::wp_last_address</code>, which is the actual address of the mem/io read/write that triggered the watchpoint and <code>::wp_last_value</code>, the actual value that was written by the mem/io write that triggered the watchpoint.</td>
    </tr>

    <tr>
      <td><code>debug remove_watchpoint &lt;id&gt;</code></td>

      <td>Remove a certain watchpoint</td>
    </tr>

    <tr>
      <td><code>debug list_conditions</code></td>

      <td>List the active conditions</td>
    </tr>

    <tr>
      <td><code>debug set_condition [-once] &lt;cond&gt; [&lt;cmd&gt;]</code></td>

      <td>Set a new debugger condition. Conditions are like breakpoints, but not
          tied to a specific address. Simulation is much slower when conditions
          are used (though generally while debugging this is not a problem).</td>
    </tr>

    <tr>
      <td><code>debug remove_condition &lt;id&gt;</code></td>

      <td>Remove a certain condition</td>
    </tr>

    <tr>
      <td><code>debug disasm [&lt;addr&gt;]</code></td>

      <td>Disassemble instructions at PC or given address</td>
    </tr>
  </table>

  <p>The probe subcommand again has subcommands:</p>
  <table>
    <tr>
      <td><code>debug probe list</code></td>
      <td>Returns a list of all probes.</td>
    </tr>
    <tr>
      <td><code>debug probe desc &lt;probe&gt;</code></td>
      <td>Returns a description of this probe.</td>
    </tr>
    <tr>
      <td><code>debug probe read &lt;probe&gt;</code></td>
      <td>Returns the current value of a probe. But note that not all probes have a value</td>
    </tr>
    <tr>
      <td><code>debug probe set_bp [-once] &lt;probe&gt; [&lt;cond&gt;] [&lt;cmd&gt;]</code></td>
      <td>Set a breakpoint on a probe. Like in the 'set_bp' subcommand you can optionally specify a condition and a command.</td>
    </tr>
    <tr>
      <td><code>debug probe remove_bp &lt;id&gt;</code></td>
      <td>Remove the given breakpoint.</td>
    </tr>
    <tr>
      <td><code>debug probe list_bp</code></td>
      <td>List the active breakpoints set on probes.</td>
    </tr>
  </table>

  <p>At first sight 'probes' and 'debuggables' are very similar. Though there are some important differences and that's why probes and debuggables use different subcommands:</p>
  <table>
    <tr>
      <td>A debuggable is an array of bytes.</td>
      <td>A probe is a single value and can have any type.</td>
    </tr>
    <tr>
      <td>A debuggable is readable and (usually) writable.</td>
      <td>A probe is always read-only.</td>
    </tr>
    <tr>
      <td>It's not possible to set breakpoints on a debuggable.</td>
      <td>You can set breakpoints on a probe (and sometimes this is the only purpose of a probe).</td>
    </tr>
  </table>

  <p>Many examples of usage of the debug command can be found in the scripts that come with openMSX (in the <code>share/scripts</code> directory). We also list a few here.
  </p>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <ul>
      <li>break (only!) after 0 is written to 0x8000):<br/>
         <code>debug set_watchpoint write_mem 0x8000 {[debug read "memory" 0x8000] ==
0x00}</code></li>
      <li>break on address 0xF37D, but only when Z80 register C has the value 0x2F:<br/>
         <code>debug set_bp 0xF37D {[reg C] == 0x2F}</code></li>
      <li>break when CPU reads from any addresses between 0xFBE5 and 0xFBEF:<br/>
         <code>debug set_watchpoint read_mem {0xFBE5 0xFBEF}</code></li>
      <li>break after a write was done to I/O port 0x99, but only when Z80 register A has a value of 0x81:<br/>
         <code>debug set_watchpoint write_io 0x99 {[reg A] == 0x81}</code></li>
      <li>break as soon as there is a pending Z80 IRQ (even when in DI mode):<br/>
         <code>debug probe set_bp z80.pendingIRQ</code></li>
      <li>break when register HL has the value 1234:<br/>
         <code>debug set_condition {[reg hl] == 1234}</code></li>
    </ul>
  </div>

  <div class="note">
    Note: Some of the commands are pretty low level. In the share/scripts directory you'll find some Tcl scripts that
    offer convenience wrappers around these commands. For example: <a class="internal" href="#other"><code>showmem</code></a>, <a class="internal" href="#other"><code>disasm</code></a>, <a class="internal" href="#other"><code>cpuregs</code></a>, <a class="internal" href="#other"><code>save_debuggable</code></a>, etc.
  </div>

  <h3><a id="disable_reversebar">disable_reversebar</a></h3>

  <p>Disables the bar on top of the gui to reverse the emulator status. Use also <code>toggle_reversebar</code> command to enable/disable this feature.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>disable_reversebar</code></td>
      <td>Disables reverse status emulator bar.</td>
    </tr>
  </table>

  <h3><a id="disk">disk&lt;x&gt; / virtual_drive</a></h3>

  <p>Insert a disk image in a drive. Optionally apply an IPS patch to the disk image.
  The commands <code>diska</code>, <code>diskb</code> etc. are
  assigned to all available "physical" disk drives in the MSX. They might not correspond to drive names as used in
  MSX-DOS.</p>

  <p>In addition to the physical <code>disk&lt;x&gt;</code> drives, there is the <code>virtual_drive</code>. This fake drive does not correspond to any MSX hardware. It can be used as a source or target for <code><a class="internal" href="#diskmanipulator">diskmanipulator</a></code> operations just like physical drives.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>diska &lt;disk image&gt;</code></td>
      <td>Insert disk image in drive "diska"</td>
    </tr>

    <tr>
      <td><code>diskb insert &lt;disk image&gt;</code></td>
      <td>Insert disk image in drive "diskb"</td>
    </tr>

    <tr>
      <td><code>diska &lt;disk image&gt; &lt;ips&gt;</code></td>
      <td>Insert disk image and apply IPS patch</td>
    </tr>

    <tr>
      <td><code>diska eject</code></td>
      <td>Remove disk from drive "diska"</td>
    </tr>

    <tr>
      <td><code>diska ramdsk</code></td>
      <td>Insert scratch disk in drive "diska"</td>
    </tr>
  </table>

  <h3><a id="diskmanipulator">diskmanipulator</a></h3>

  <p>A collection of commands to manipulate (the files on) a disk image.</p>

  <p>It can be used in so many different ways, that we wrote a separate manual for it: <a class="external" href="diskmanipulator.html">Using Diskmanipulator</a>.</p>

  <h3><a id="escape_grab">escape_grab</a></h3>

  <p>Only has effect in windowed mode and when the <code><a class="internal" href="#grabinput">grabinput</a></code> setting is active. Temporarily release the input grab.
  After the openMSX window has lost and regained the focus, the grab is again effective.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>escape_grab</code></td>

      <td>Temporarily release the input grab</td>
    </tr>
  </table>

  <h3><a id="exit">exit</a></h3>

  <p>Terminate the openMSX application. Optionally you can pass an exit-code.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>exit</code></td>
      <td>Exits the emulator</td>
    </tr>
  </table>

  <h3><a id="enable_reversebar">enable_reversebar</a></h3>

  <p>Enables a bar on top of the gui to reverse the emulator status. Use also <code>toggle_reversebar</code> command to enable/disable this feature.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>enable_reversebar</code></td>
      <td>Enable reverse status emulator bar.</td>
    </tr>
  </table>

  <h3><a id="ext">ext / ext&lt;x&gt;</a></h3>

  <p>Insert an MSX extension in a running MSX machine. The <code>ext</code> command inserts the extension in the first available slot. The <code>exta</code>, <code>extb</code> etc. commands insert it in the specified slot. The extension can be removed again with the <code><a class="internal" href="#remove_extension">remove_extension</a></code>
  command. See also the commands <code><a class="internal" href="#cart">cart</a></code>, <code><a class="internal" href="#list_extensions">list_extensions</a></code> and <code><a class="internal" href="#remove_extension">remove_extension</a></code>.</p>

  <p>To get a list of possible extensions it's convenient to use the tab-completetion feature, i.e. type '<code>ext&lt;space&gt;&lt;tab&gt;</code>'. Alternatively the command '<code><a class="internal" href="#openmsx_info">openmsx_info</a> extensions</code>' gives you the same information (and is easier to use in a scripting context).</p>

  <p>Note that some extensions (i.e. those without any memory) will not physically occupy any slot when inserted, even when they were inserted in a specific slot.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>ext fmpac</code></td>

      <td>Insert an FMPAC in a running MSX machine in the first free slot</td>
    </tr>
    <tr>
      <td><code>extb scc</code></td>

      <td>Insert the empty SCC cart in slot B of the running MSX machine</td>
    </tr>
  </table>

  <h3><a id="filepool">filepool</a></h3>

  <p>With this command you can manage your file pool settings. File pools are directories on your host system (PC/Mac/Dingoo/etc.). They are used by openMSX to search files in, which are referred to from machine or extension definition files, save states or replays which you are trying to load. First, the file will be searched at the path that was also used when the save state or replay was created. But if it isn't found there (which is usually the case if you load such a state or replay you got from someone else), it will use the file pools to search instead. In other words, if you are trying to load such replays, it's probably a good idea to put the media files referred to (ROMs, disks, tapes) in the (proper) filepool.</p>

  <p>File pools have the following properties:</p>
  <dl>
    <dt>path</dt>
    <dd>The path to the directory which is the actual file pool</dd>

    <dt>position</dt>
    <dd>There exists a list of file pools, which are searched in order of their position.</dd>

    <dt>type(s)</dt>
    <dd>A file pool can serve specific types. Currently, the valid types are
      <dl>
        <dt><code>system_rom</code></dt>
        <dd>for system ROMs, you are probably using this one already if you installed your system ROMs in the recommended place <code>share/systemroms</code>,</dd>
        <dt><code>rom</code></dt>
        <dd>for other ROM files,</dd>
        <dt><code>disk</code></dt>
        <dd>for disk images and</dd>
        <dt><code>tape</code></dt>
        <dd>for cassette/tape images.</dd>
      </dl>
    </dd>
  </dl>

  <p>Apart from the default system ROM file pool as mentioned above, the other default file pool is <code>share/software</code>, which is configured for all other (than type <code>system_rom</code>) software files.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>filepool list</code></td>

      <td>Shows the currently defined file pool entries (see below for example output)</td>
    </tr>

    <tr>
      <td><code>filepool add -path &lt;path&gt; -types &lt;typelist&gt; [-position &lt;pos&gt;]</code></td>

      <td>Add a new entry with the given properties as explained above. For the types, use a format like <code>"rom tape disk"</code>. Optionally, you can also specify where in the list of existing file pools the new file pool should be added. By default, this is at the end.</td>
    </tr>

    <tr>
      <td><code>filepool remove &lt;position&gt;</code></td>

      <td>Remove the file pool at the given position</td>
    </tr>

    <tr>
      <td><code>filepool reset</code></td>

      <td>Reset the file pool settings to the default values</td>
    </tr>
  </table>

  <p>An example of the default file pools for a Windows 7 system with user Quibus:</p>
<pre>
1: C:/Users/Quibus/Documents/openMSX/share/systemroms  [system_rom]
2: C:/Users/Quibus/Documents/openMSX/share/software  [rom disk tape]
3: C:/Program Files/openMSX/share/systemroms  [system_rom]
4: C:/Program Files/openMSX/share/software  [rom disk tape]
</pre>
  <p>The first one is the system ROMs dir in the user's home directory. The second is the software file pool for other software in the user's home directory. The last two are similar, but then on system level. On a UNIX like system, you get something very similar.</p>

  <h3><a id="findcheat">findcheat</a></h3>

  <p>This is a tool to find new cheats, for example for a certain game it can help you find the memory location where the number of remaining lives is stored. These cheats can later be added to the <code><a class="internal" href="#trainer">trainer</a></code> command.</p>

  <p>It works more or less like this:</p>
  <ol>
    <li>Initialize the <code>findcheat</code> tool, this takes an initial snapshot of the MSX memory.</li>
    <li>Perform some action in the game that changes the variable that you're interested in. For example if you want to find the memory location where the number of lives is stored, you have to loose (or gain) a life in the game.</li>
    <li>Now use the <code>findcheat</code> tool to compare the current MSX memory state with the previous memory snapshot. <code>findcheat</code> offers a lot of possibilities here, for example you can search for memory locations that became bigger or smaller or locations whose value changed or didn't change.</li>
    <li><code>findcheat</code> will show a list of memory locations that still match the search criteria.</li>
    <li>If there still are still too many matches, repeat from step 2.</li>
  </ol>

  <p>Vampier made a video tutorial on how to use <code>findcheat</code>, you can find it <a class="external" href="http://www.youtube.com/watch?v=F11ltfkCtKo">here</a>.</p>


  <h3><a id="hd">hd&lt;x&gt;</a></h3>

  <p>Change the hard disk image. The commands <code>hda</code>, <code>hdb</code> etc. are assigned to all available hard disk drives in the MSX. They will not correspond to drive names as used in MSX-DOS.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>hda &lt;disk image&gt;</code></td>

      <td>Use hard disk image for hard disk "hda"</td>
    </tr>

    <tr>
      <td><code>hda insert &lt;disk image&gt;</code></td>

      <td>Use hard disk image for hard disk "hda"</td>
    </tr>

    <tr>
      <td><code>hda</code></td>

      <td>Show current hard disk image for hard disk "hda"</td>
    </tr>
  </table>

  <div class="note">
    Note: Because of disk caching, changing the hard disk when the MSX is running can lead to corruption of the hard disk contents. Therefore openMSX blocks the <code>hd&lt;x&gt;</code> commands unless the MSX is powered off. See <code><a class="internal" href="#power">power</a></code> setting.
  </div>

  <h3><a id="help">help</a></h3>

  <p>Shows help info for console commands.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>help</code></td>
      <td>Shows a list of all possible commands</td>
    </tr>

    <tr>
      <td><code>help &lt;command&gt;</code></td>
      <td>Shows help info for a specific command</td>
    </tr>

    <tr>
      <td><code>help &lt;command&gt; &lt;subcommand&gt;</code></td>
      <td>Some commands have more detailed help on subcommands</td>
    </tr>
  </table>

  <h3><a id="incr">incr</a></h3>

  <p>Increment an integer setting.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>incr &lt;setting&gt;</code></td>

      <td>Increment the specified setting by one</td>
    </tr>

    <tr>
      <td><code>incr &lt;setting&gt; &lt;num&gt;</code></td>

      <td>Increment the specified setting by the given amount (can be negative)</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>incr speed</code><br />
    <code>incr renshaturbo 10</code><br />
    <code>incr scanline -5</code>
  </div>

  <h3><a id="iomap">iomap</a></h3>

  <p>Shows what I/O ports are connected to which devices. The related command <code><a class="internal" href="#slotmap">slotmap</a></code> shows a similar overview, but for memory-mapped devices.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>iomap</code></td>

      <td>Shows the I/O map of the current MSX machine</td>
    </tr>
  </table>

  <h3><a id="keymatrix">keymatrixdown / keymatrixup</a></h3>

  <p>Press or release keys in the MSX keyboard matrix. Can be used to make an external program or Tcl script press MSX keys. For some more information about the keymatrix, you could read the <a href="http://map.grauw.nl/articles/keymatrix.php">article on the MAP</a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>keymatrixdown &lt;row&gt; &lt;mask&gt;</code></td>
      <td>Press the indicated MSX keys</td>
    </tr>

    <tr>
      <td><code>keymatrixup   &lt;row&gt; &lt;mask&gt;</code></td>
      <td>Release the indicated MSX keys</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>keymatrixdown 6 0x01</code><br />
    <code>keymatrixup   6 0x01</code>
  </div>

  <h3><a id="laserdiscplayer">laserdiscplayer</a></h3>

  <p>Controls the Laserdisc player; a Laserdisc can be inserted or ejected. When a real Laserdisc player is connected to an MSX, no other controls are available either.</p>

  <p>Note that this command is only available when the Pioneer PX-7 or Pioneer PX-V60 MSX machine is being emulated</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>laserdiscplayer insert &lt;filename&gt;</code></td>

      <td>Inserts the specified file into the virtual laserdisc player.</td>
    </tr>

    <tr>
      <td><code>laserdiscplayer eject</code></td>

      <td>Ejects the laserdisc from the virtual laserdisc player; this emulates pressing the eject button on a real Laserdisc Player.</td>
    </tr>
  </table>

  <h3><a id="list_extensions">list_extensions</a></h3>

  <p>Returns a list of inserted cartridges and extensions. These can be removed with the <code><a class="internal" href="#remove_extension">remove_extension</a></code> command or
  additional items can be added with the <code><a class="internal" href="#cart">cart</a></code> and <code><a class="internal" href="#ext">ext</a></code> commands.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>list_extensions</code></td>

      <td>Lists all currently inserted cartridges and extensions</td>
    </tr>
  </table>

  <h3><a id="load_icons">load_icons</a></h3>

  <p>Load a different icon set (used for the On Screen Display (OSD) LEDs).</p>
  <p>Icon sets are stored in the share/skins directory.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>load_icons &lt;name&gt;</code></td>

      <td>Load the given icon set, but don't change the position on the screen.</td>
    </tr>

    <tr>
      <td><code>load_icons &lt;name&gt; &lt;position&gt;</code></td>

      <td>Load the given icon set and place them at the requested position. Position can be <code>bottom</code>, <code>top</code>, <code>left</code> or <code>right</code>.</td>
    </tr>
  </table>

  <h3><a id="load_settings">load_settings</a></h3>

  <p>Load settings from a given settings XML file. The settings file does not have to be complete: settings that are not mentioned in the given file are left untouched. See also <code><a class="internal" href="#save_settings">save_settings</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>load_settings &lt;filename&gt;</code></td>

      <td>Load settings from the given file</td>
    </tr>
  </table>

  <h3><a id="machine">machine</a></h3>

  <p>Switch to a new MSX machine.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>machine</code></td>

      <td>Returns the handle for the currently active machine</td>
    </tr>

    <tr>
      <td><code>machine &lt;machine name&gt;</code></td>

      <td>Switch to the specified machine, also returns the handle for that machine</td>
    </tr>
  </table>

  <div class="note">
    Note: The machine handle is mostly used by external applications controlling openMSX (see also <a class="external" href="openmsx-control.html">Controlling openMSX from External Applications</a>). For interactive use you can omit the machine handle to have the commands operate on the current machine.
  </div>


  <h3><a id="machines">create_machine / load_machine / activate_machine / list_machines / delete_machine</a></h3>

  <p>openMSX has the possibility to have multiple MSX machines concurrently in memory. This is more or less like multiple tabs in a web browser: you only work with one at-a-time, but you can have multiple open at the same time and easily switch between them. These commands are low level commands to manage this.</p>

  <p>Some commands are specific per machine, for example if you insert a disk image into the disk drive of the emulated MSX machine and if you have multiple MSX machines, you need to specify in which MSX machine you want to insert the disk. To solve this, we introduced the concept of the 'active' MSX machine (this is also the machine that is visible and audible). All unqualified machine-specific command will act on the active machine. If you want to execute the command in a specific machine, you can qualify the command with a machineID prefix.</p>

  <table>
    <tr>
      <td><code>diska &lt;diskimage&gt;</code></td>
      <td>execute the diska command in the active machine</td>
    </tr>
    <tr>
      <td><code>&lt;machine-ID&gt;::diska &lt;diskimage&gt;</code></td>
      <td>execute the diska command in the specified machine</td>
    </tr>
  </table>

  <h4><code>create_machine</code>:</h4>
  <p>This command returns a new machine-id. This machine-id can be used in the following commands. In the web browser analogy this command would open a new empty tab.</p>

  <h4><code>load_machine</code>:</h4>
  <p>This command loads a machine configuration (= MSX model) into the given machine-ID.
  In the web browser analogy, this command would load a page in a previously created empty tab. And unlike a web browser, where you can reload a different page in the same tab, you can only load a machine configuration once in the same machine-ID.</p>

  <h4><code>activate_machine</code>:</h4>
  <p>This command activates the given machine-ID. At any time there can only be one active machine-ID. This is analogue to switching tabs in a web browser.</p>

  <h4><code>list_machines</code>:</h4>
  <p>Returns a list of all currently existing machine-IDs.</p>

  <h4><code>delete_machine</code>:</h4>
  <p>Deletes the given machine-ID. This is analogue to closing a tab in a web browser.</p>

  <h4>examples:</h4>
  <table>
    <tr>
      <td><code>set oldID [machineID]</code></td>
      <td>get the current machineID</td>
    </tr>
    <tr>
      <td><code>set newID [create_machine]</code></td>
      <td>create a new machineID</td>
    </tr>
    <tr>
      <td><code>$newID::load_machine Philips_NMS_8250</code></td>
      <td>load an MSX2 configuration in that new machineID</td>
    </tr>
    <tr>
      <td><code>activate_machine $newID</code></td>
      <td>switch to the new machine</td>
    </tr>
    <tr>
      <td><code>activate_machine $oldID</code></td>
      <td>switch back to old machine</td>
    </tr>
    <tr>
      <td><code>delete_machine $newID</code></td>
      <td>delete new machine</td>
    </tr>
  </table>

  <div class="note">
    If you don't care about multiple active machines, the <code><a class="internal" href="#machine">machine</a></code> command is much more convenient to switch to a different MSX configuration.
  </div>


  <h3><a id="machine_info">machine_info</a></h3>

  <p>Shows information about a certain topic. This command is similar to the <code><a class="internal" href="#openmsx_info">openmsx_info</a></code> command. The topics of
  <code>machine_info</code> are all machine specific, while the topics of <code><a class="internal" href="#openmsx_info">openmsx_info</a></code> are generic.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>machine_info</code></td>

      <td>Shows a list of all possible topics</td>
    </tr>

    <tr>
      <td><code>machine_info &lt;topic&gt;</code></td>

      <td>Shows info on the given topic</td>
    </tr>
  </table>

  <h3><a id="message">message</a></h3>
  <p>Show a message, with optional level (info, warning, error). By default this message will be shown in a colored box at the top of the screen for a (short) duration and then fade away.</p>
  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>message &lt;text&gt; [&lt;level&gt;]</code></td>
    </tr>
  </table>
  <div class="subsectiontitle">
    examples:
  </div>
  <div class="examples">
    <code>message "Hello world!"</code><br />
    <code>message "Something bad happened" error</code><br />
  </div>

  <h3><a id="monitor_type">monitor_type</a></h3>

  <p>Select a monitor color profile.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>monitor_type</code></td>

      <td>Shows the currently selected color profile</td>
    </tr>

    <tr>
      <td><code>monitor_type -list</code></td>

      <td>Lists all available color profiles</td>
    </tr>

    <tr>
      <td><code>monitor_type &lt;profile&gt;</code></td>

      <td>Selects a new color profile</td>
    </tr>
  </table>

  <div class="note">
    Note: This command is a convenience wrapper around the <code><a class="internal" href="#color_matrix">color_matrix</a></code> setting.
  </div>

  <h3><a id="mute_channels">mute_channels / unmute_channels / solo</a></h3>

  <p>Mute or unmute specific individual channels of sound devices. The syntax is very similar to the <code><a class="internal" href="#record_channels">record_channels</a></code> command.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>mute_channels &lt;device&gt; [&lt;channels&gt;]] [&lt;device&gt; [&lt;channels&gt;]]</code></td>

      <td>Mute the specified channels of the specified device(s). If a device is given but no specific channels are specified, all channels of that device are muted. If no arguments are given at all, this command return a list of all currently muted channels.</td>
    </tr>

    <tr>
      <td><code>unmute_channels &lt;device&gt; [&lt;channels&gt;]] [&lt;device&gt; [&lt;channels&gt;]]</code></td>

      <td>Unmute the specified channels of the specified device(s). If a device is given but no specific channels are specified, all channels of that device are unmuted. If no arguments are given at all, this command unmutes all channels of all devices. </td>
    </tr>
    <tr>
      <td><code>solo &lt;device&gt; [&lt;channels&gt;]] [&lt;device&gt; [&lt;channels&gt;]]</code></td>

      <td>Mute all channels of all devices except for the specified channels.</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>mute_channels</code><br />
    <code>mute_channels PSG</code><br />
    <code>mute_channels SCC 2,4</code><br />
    <code>unmute_channels</code><br />
    <code>unmute_channels PSG 1 SCC 1,3-4</code><br />
    <code>solo PSG 3</code>
  </div>


  <h3><a id="nowind">nowind&lt;x&gt;</a></h3>

  <p>Similar to the <code><a class="internal" href="#disk">disk&lt;x&gt;</a></code>
  commands there is a <code>nowind&lt;x&gt;</code> command for each nowind
  interface. This command is modeled after the 'usbhost' command of the real
  nowind interface. Though only a subset of the options is supported. Here's a
  short overview of the command line options:</p>

  <table>
    <tr><th>long</th>      <th>short</th><th>explanation</th></tr>
    <tr><td>--image</td>   <td>-i</td>   <td>specify disk image</td></tr>
    <tr><td>--hdimage</td> <td>-m</td>   <td>specify harddisk image</td></tr>
    <tr><td>--romdisk</td> <td>-j</td>   <td>enable romdisk</td></tr>
    <tr><td>--ctrl</td>    <td>-c</td>   <td>no phantom disks</td></tr>
    <tr><td>--no-ctrl</td> <td>-C</td>   <td>enable phantom disks</td></tr>
    <tr><td>--allow</td>   <td>-a</td>   <td>allow other diskroms to initialize</td></tr>
    <tr><td>--no-allow</td><td>-A</td>   <td>don't allow other diskroms to initialize</td></tr>
  </table>

  <p>If you don't pass any arguments to this command, you'll get an overview of
  the current nowind status.</p>

  <p>This command will create a certain amount of drives on the nowind
  interface and (optionally) insert diskimages in those drives. For each of
  these drives there will also be a
  <code><a class="internal" href="#disk">nowind&lt;x&gt;&lt;1..8&gt;</a></code>
  command created. Those commands are similar to e.g. the
  <code><a class="internal" href="#disk">diska</a></code>
  command. They can be used to access the more advanced diskimage insertion
  options.</p>

  <p>In some cases it is needed to reboot the MSX before the changes take
  effect. In those cases you'll get a message that warns about this.</p>

  <div class="subsectiontitle">examples:</div>
  <table>
    <tr>
      <td><code>nowinda -a image.dsk -j</code></td>
      <td>Image.dsk is inserted into drive A: and the romdisk will be drive B:.
      Other diskroms will be able to install drives as well. For example when
      the MSX has an internal diskdrive, drive C: en D: will be available as
      well.</td>
    </tr>
    <tr>
      <td><code>nowinda disk1.dsk disk2.dsk</code></td>
      <td>The two images will be inserted in A: and B: respectively.</td>
    </tr>
    <tr>
      <td><code>nowinda -m hdimage.dsk</code></td>
      <td>Inserts a harddisk image. All available partitions will be mounted
      as drives.</td>
    </tr>
    <tr>
      <td><code>nowinda -m hdimage.dsk:1</code></td>
      <td>Inserts the first partition only.</td>
    </tr>
    <tr>
      <td><code>nowinda -m hdimage.dsk:2-4</code></td>
      <td>Inserts the 2nd, 3th and 4th partition as drive A: B: and C:.</td>
    </tr>
  </table>


  <h3><a id="openmsx_info">openmsx_info</a></h3>

  <p>Shows information about a certain topic. For machine-specific topics, use the related command <code><a class="internal" href="#machine_info">machine_info</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>openmsx_info</code></td>

      <td>Shows a list of all possible topics</td>
    </tr>

    <tr>
      <td><code>openmsx_info &lt;topic&gt;</code></td>

      <td>Shows info on the given topic</td>
    </tr>
  </table>


  <h3><a id="openmsx_update">openmsx_update</a></h3>

  <p>Enable or disable update notifications of a certain type. This command is intended for external programs controlling openMSX. More about this in <a class="external" href="openmsx-control.html">Controlling openMSX from External Applications</a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>openmsx_update enable &lt;type&gt;</code></td>

      <td>enable notifications for this type</td>
    </tr>

    <tr>
      <td><code>openmsx_update disable &lt;type&gt;</code></td>

      <td>disable notifications for this type</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>openmsx_update enable led</code><br />
    <code>openmsx_update disable setting</code>
  </div>


  <h3><a id="osd">osd</a></h3>

  <p>openMSX has the possibility to show OSD (on screen display) elements. For example, the LEDs and the fps-indicator are implemented via OSD elements. This command allows to create new OSD elements, configure existing elements or delete elements.</p>

  <p>This command is only useful if you plan to adjust or enhance the openMSX OSD, or create your own OSD widgets.</p>

  <!-- do we really have to repeat the help text from the openmsx source code here? -->

  <p>Execute "<code>help osd</code>" to get a detailed description of this command, which we will not repeat here.</p>

  <h3><a id="palette">palette</a></h3>

  <p>Shows the current VDP palette settings.  Related command: <code><a class="internal" href="#vdpregs">vdpregs</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>palette</code></td>

      <td>Show the currently active color palette</td>
    </tr>
  </table>

  <h3><a id="plugunplug">plug / unplug</a></h3>

  <p>Plugs or unplugs a plug into a connector, for example plug a virtual joystick into a virtual joystick port.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>plug</code></td>

      <td>Shows all currently connected plugs</td>
    </tr>

    <tr>
      <td><code>plug &lt;connector&gt;</code></td>

      <td>Shows currently connected plug for the specified connector</td>
    </tr>

    <tr>
      <td><code>plug &lt;connector&gt; &lt;plug&gt;</code></td>

      <td>Plugs the specified plug into the specified connector</td>
    </tr>

    <tr>
      <td><code>unplug &lt;connector&gt;</code></td>

      <td>Unplugs the plug connected to the specified connector</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>plug cassetteport cassetteplayer</code><br />
    <code>plug joyporta mouse</code><br />
    <code>plug printerport logger</code><br />
    <code>unplug joyportb</code><br />
  </div>

  <h3><a id="psg_profile">psg_profile</a></h3>

  <p>Select a PSG sound profile.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>psg_profile</code></td>

      <td>Shows the currently selected sound profile</td>
    </tr>

    <tr>
      <td><code>psg_profile -list</code></td>

      <td>Lists all available sound profiles</td>
    </tr>

    <tr>
      <td><code>psg_profile &lt;profile&gt;</code></td>

      <td>Selects a new sound profile</td>
    </tr>
  </table>

  <div class="note">
    Note: This command is a convenience wrapper around the <code><a class="internal" href="#soundchip_vibrato_frequency">PSG_vibrato_frequency</a></code>, <code><a class="internal" href="#soundchip_vibrato_percent">PSG_vibrato_percent</a></code>, <code><a class="internal" href="#soundchip_detune_frequency">PSG_detune_frequency</a></code> and <code><a class="internal" href="#soundchip_detune_percent">PSG_detune_percent</a></code> settings.
  </div>

  <h3><a id="record">record</a></h3>

  <p>Controls video recording: write openMSX audio/video to an AVI file.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>record start</code></td>

      <td>Record to file "openmsxNNNN.avi"</td>
    </tr>

    <tr>
      <td><code>record start &lt;filename&gt;</code></td>

      <td>Record to indicated file</td>
    </tr>

    <tr>
      <td><code>record start -prefix foo</code></td>

      <td>Record to file "fooNNNN.avi"</td>
    </tr>

    <tr>
      <td><code>record stop</code></td>

      <td>Stop recording</td>
    </tr>

    <tr>
      <td><code>record toggle</code></td>

      <td>Toggle recording</td>
    </tr>
  </table>

  <p>The <code>start</code> subcommand also accepts an optional <code>-audioonly</code>, <code>-videoonly</code>, <code>-doublesize</code> and a <code>-triplesize</code> flag. Videos are recorded in a 320&times;240 size by default, at 640&times;480 when the <code>-doublesize</code> flag is used and 960&times;720 when using the <code>-triplesize</code> flag.
  If only audio is recorded, the created file will be a WAV file instead of an AVI file.</p>
  <p>If any stereo sound devices are present or any sound device has an off-center balance, the recording will be made in stereo, otherwise it will be mono.
  If a recording is made in mono and then a stereo sound device is added, you'll receive a warning that stereo sound has been detected and that the two channels will be mixed down to mono.
  You can prevent this from happening by using the <code>-stereo</code> option to force a stereo recording even if no stereo devices are present at the time you enter the command.
  You can also force a mono recording with <code>-mono</code> to save space.</p>
  <p>The <code><a class="internal" href="#soundlog">soundlog</a></code> command is a shorthand for <code>record -audioonly</code>.</p>
  <p>Use <code>record_chunks</code> if you want some extra options. You can control the maximum length (in seconds) to record and also set up multiple recordings of a certain length. This is very useful if you want to record for e.g. YouTube. The default length is 14:59 (to make sure YouTube will accept it). Using this command implies <code>-doublesize</code>.</p>
  <p>Use <code>record_chunks_on_framerate_changes</code> if you want to split up the recording in several files, whenever the frame rate of the MSX changes. An AVI file cannot contain video of multiple frame rates, so sound and video will get out of sync if that happens without using this special version of the command. Do not specify the target filename with this variant, or openMSX will record all chunks to the same file.</p>

  <h3><a id="record_channels">record_channels</a></h3>

  <p>A high level command to record individual channels of sound chips to separate files. In the following variants of the command you can specify devices and channels. Multiple devices can be specified and multiple channels as well. If you want to specify channels of a device, put them right after the device. You can also specify <code>all</code> for the device, which means that all sound devices in the currently running MSX will be recorded. When starting recording, an option <code>-prefix</code> can be given to specify a filename prefix.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>record_channels [start] &lt;device&gt; [&lt;channels&gt;] [&lt;device&gt; [&lt;channels&gt;]] [-prefix &lt;prefix&gt;]</code></td>

      <td>Start recording the specified channel(s) of the specified device(s). If no channels are given, all channels of the device are recorded. </td>
    </tr>

    <tr>
      <td><code>record_channels stop [&lt;device&gt; [&lt;channels&gt;]] [&lt;device&gt; [&lt;channels&gt;]]</code></td>

      <td>Stop recording the specified channel(s) of the specified device(s). If no channels are given, recording for all channels is stopped for the given device(s). If no devices are given, all channel recording is stopped.</td>
    </tr>

    <tr>
      <td><code>record_channels all -prefix justtesting</code></td>

      <td>Record all channels of all sound devices and create the file names with prefix 'justtesting' (e.g. to quickly delete all these files again).</td>
    </tr>

    <tr>
      <td><code>record_channels list</code></td>

      <td>Lists which channels of which sound chips are currently being recorded.</td>
    </tr>

  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>record_channels start PSG</code><br />
    <code>record_channels PSG</code><br />
    <code>record_channels SCC 1,4-5</code><br />
    <code>record_channels SCC PSG 1</code><br />
    <code>record_channels "MSX Music" 7-9 SCC 3,5 PSG 2</code><br />
    <code>record_channels stop</code><br />
    <code>record_channels stop PSG</code><br />
    <code>record_channels stop SCC 3,5</code><br />
    <code>record_channels list</code>
  </div>

<h3><a id="remove_extension">remove_extension</a></h3>

  <p>Remove a cartridge or extension from a running MSX machine. See also the commands <code><a class="internal" href="#cart">cart</a></code>, <code><a class="internal" href="#ext">ext</a></code>, <code><a class="internal" href="#list_extensions">list_extensions</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>remove_extension fmpac</code></td>

      <td>Removes the FMPAC extension from the running MSX</td>
    </tr>
  </table>

  <h3><a id="reset">reset</a></h3>

  <p>Emulates the pressing of the reset button on the MSX. This sends a reset pulse to all devices, but does not erase memory contents.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>reset</code></td>

      <td>Resets the current machine</td>
    </tr>
  </table>

  <h3><a id="reverse">reverse</a></h3>

  <p>Controls the reverse feature. When this feature is enabled (the default), openMSX will collect data while emulating, which enables you to go back (and forward) in MSX time. In other words: you cannot use the commands to go back and forward in time, if you disable the feature.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>reverse start</code></td>

      <td>Start collecting data (enable the reverse feature).</td>
    </tr>
    <tr>
      <td><code>reverse stop</code></td>

      <td>Stop collecting data (disable reverse feature) and remove all collected data.</td>
    </tr>
    <tr>
      <td><code>reverse status</code></td>

      <td>Gives information about the reverse feature and the data it collected. Mostly useful for scripts.</td>
    </tr>
    <tr>
      <td><code>reverse goback &lt;n&gt;</code></td>

      <td>Go back &lt;n&gt; seconds in time. Of course, you cannot go back to a time before the time the <code>reverse start</code> command was given.</td>
    </tr>
    <tr>
      <td><code>reverse viewonlymode &lt;on|off&gt;</code></td>

      <td>Control the view only mode of the reverse feature. In view only mode, the replay will never get interrupted by any user actions that normally would interrupt the replay. Use this to safely view a replay without accidentally ruining it by touching a key.</td>
    </tr>
    <tr>
      <td><code>reverse goto &lt;time&gt;</code></td>

      <td>Go to the indicated absolute moment in MSX time (given in seconds). If the time is before the time openMSX started collecting data (with the <code>reverse start</code> command) openMSX will jump to the time when collecting started.</td>
    </tr>
    <tr>
      <td><code>reverse truncatereplay</code></td>

      <td>Stop replaying and wipe all replay data that is in the future (so after <strong>now</strong>). This is useful if you are hindered by the future events somehow, for instance when you are playing a game and jumped too early and therefore reversed. Be careful with this, as there is no way to recover this future. If you are at time 0, it means your whole replay will be gone after executing this command!</td>
    </tr>
    <tr>
      <td><code>reverse savereplay [&lt;filename&gt;]</code></td>

      <td>Save the collected data (an initial savestate and all collected input events) to a file.</td>
    </tr>
    <tr>
      <td><code>reverse loadreplay [-goto &lt;begin|end|savetime|&lt;n&gt;&gt;] [-viewonly] &lt;filename&gt;</code></td>

      <td>Load the replay from the given file and start it. Loads the initial snapshot and starts replaying the recorded events. Enables the reverse feature automatically. With the <code>-goto</code> option, you can specify where to jump to in the replay after loading (<code>begin</code> is default), where <code>savetime</code> is the time at which the replay was saved and <code>n</code> is an absolute time in seconds in the replay. The <code>-viewonly</code> option is a shortcut to put the reverse feature in viewonly mode directly after loading the replay. Without this option, it will always go to normal mode.</td>
    </tr>
  </table>

  <p>There are some extra helper commands to make the feature easier to use.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>go_back_one_second</code> / <code>go_forward_one_second</code></td>

      <td>Go back or forward one second in time (if possible). These are used for the default PageUp and PageDown key bindings.</td>
    </tr>
    <tr>
      <td><code>reverse_prev [&lt;min&gt; [&lt;max&gt;]]</code></td>

      <td>Go back in time to the previous (internal) snapshot. The further back in the past the less dense the amount of snapshots are. So, executing this command multiple times, will take successively bigger steps in the past. You can optionally specify a minimal and maximal step size. You will at least go back the minimal amount of time (even if there's a snapshot closer to the current time) and at most the maximal amount of time (even if there's no snapshot within the maximum specified time from the current time).</td>
    </tr>
    <tr>
      <td><code>reverse_next [&lt;min&gt; [&lt;max&gt;]]</code></td>

      <td>As <code>reverse_prev</code> but then it goes to the closest snapshot in the future (if possible).</td>
    </tr>
  </table>

  <p>Because the reverse feature is very useful, it is automatically enabled via <code><a class="internal" href="#auto_enable_reverse">auto_enable_reverse</a></code> setting.</p>

  <h3><a id="save_settings">save_settings</a></h3>

  <p>Write the current openMSX settings to a settings XML file. See also <code><a class="internal" href="#load_settings">load_settings</a></code>.</p>

  <p>If you disabled <code><a class="internal" href="#save_settings_on_exit">save_settings_on_exit</a></code>, you can use this command to save your preferences.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>save_settings</code></td>

      <td>Save settings to the default settings file</td>
    </tr>

    <tr>
      <td><code>save_settings &lt;filename&gt;</code></td>

      <td>Save settings to the given file</td>
    </tr>
  </table>


  <h3><a id="savestate">savestate / loadstate / list_savestates / delete_savestate</a></h3>

  <p>These commands can be used to manage savestates. These are much easier to use than the lowlevel <code><a class="internal" href="#store_machine">store_machine</a></code> and <code><a class="internal" href="#store_machine">restore_machine</a></code> commands.</p>

  <h4><code>savestate [&lt;name&gt;]</code></h4>
  <p>This creates a snapshot of the currently emulated MSX machine. Optionally you can specify a name for the savestate, if you omit this name, the default name <code>quicksave</code> will be taken.</p>

  <h4><code>loadstate [&lt;name&gt;]</code></h4>
  <p>This restores a previously created savestate. Like above you can specify a name which defaults to <code>quicksave</code> if omitted.</p>

  <h4><code>list_savestates</code></h4>
  <p>This returns the names of all previously created savestates.</p>

  <h4><code>delete_savestate &lt;name&gt;</code></h4>
  <p>Delete a previously created savestate.</p>


  <h3><a id="screenshot">screenshot</a></h3>

  <p>Take a screenshot of the openMSX screen. By default this takes a screenshot of the 'scaled' MSX screen (see <code><a class="internal" href="#scale_algorithm">scale_algorithm</a></code> setting) without OSD elements (e.g. console and icons). If you want to include the OSD elements pass the <code>-with-osd</code> option. If you want a screenshot of the 'unscaled' raw MSX screen, pass the <code>-raw</code> option. The screenshots are PNG files and (by default) are saved in the <code>screenshots</code> subdirectory of the openMSX data directory in your home directory. There's also an option <code>-no-sprites</code> to take a screenshot with sprite rendering disabled.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td>
        <code>screenshot [-with-osd] [-raw [-doublesize]] [-no-sprites] [-prefix &lt;prefix&gt;] [&lt;filename&gt;]</code>
      </td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <table>
    <tr>
      <td><code>screenshot</code></td>
      <td>Write screenshot to file "openmsxNNNN.png"</td>
    </tr>
    <tr>
      <td><code>screenshot &lt;filename&gt;</code></td>
      <td>Write screenshot to indicated file</td>
    </tr>
    <tr>
      <td><code>screenshot -prefix foo</code></td>
      <td>Write screenshot to file "fooNNNN.png"</td>
    </tr>
    <tr>
      <td><code>screenshot -raw</code></td>
      <td>Create screenshot of the raw MSX screen only (so no icons or console and no scaling)</td>
    </tr>
    <tr>
      <td><code>screenshot -raw -doublesize</code></td>
      <td>Create screenshot of the raw MSX screen only, with resolution 640&times;480</td>
    </tr>
    <tr>
      <td><code>screenshot -with-osd</code></td>
      <td>Create screenshot of the scaled screen, including OSD elements</td>
    </tr>
    <tr>
      <td><code>screenshot -no-sprites</code></td>
      <td>Create screenshot with sprite rendering disabled</td>
    </tr>
  </table>

  <h3><a id="set">set</a></h3>

  <p>Change or query the value of various settings. See also: <code><a class="internal" href="#unset">unset</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;setting&gt;</code></td>

      <td>Query the current value of the specified setting</td>
    </tr>

    <tr>
      <td><code>set &lt;setting&gt; &lt;value&gt;</code></td>

      <td>Change the specified setting to the given value</td>
    </tr>
  </table>

  <p>The settings that can be adjusted with this command are listed and explained <a class="internal" href="#settings">later</a> in this document.</p>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set accuracy pixel</code><br />
    <code>set blur 25</code><br />
    <code>set scanline 20</code><br />
    <code>set deinterlace on</code><br />
  </div>

  <h3><a id="slotmap">slotmap</a></h3>

  <p>Shows what devices are inserted into which slots. The related command <code><a class="internal" href="#iomap">iomap</a></code> shows a similar overview, but for I/O mapped devices.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>slotmap</code></td>

      <td>Shows the slot map of the current MSX machine</td>
    </tr>
  </table>

  <h3><a id="slotselect">slotselect</a></h3>

  <p>Shows the currently selected slots. To see what devices are located in the slots, use the <code><a class="internal" href="#slotmap">slotmap</a></code> command.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>slotselect</code></td>

      <td>Shows the currently selected slot for each page</td>
    </tr>
  </table>

  <h3><a id="soundlog">soundlog</a></h3>

  <p>Controls sound logging: writing the openMSX sound to a WAV file.</p>

  <p>This command is a shorthand for <code><a class="internal" href="#record">record</a> -audioonly</code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>soundlog start</code></td>

      <td>Log sound to file "openmsxNNNN.wav"</td>
    </tr>

    <tr>
      <td><code>soundlog start &lt;filename&gt;</code></td>

      <td>Log sound to indicated file</td>
    </tr>

    <tr>
      <td><code>soundlog start -prefix foo</code></td>

      <td>Log sound to file "fooNNNN.wav"</td>
    </tr>

    <tr>
      <td><code>soundlog stop</code></td>

      <td>Stop logging sound</td>
    </tr>

    <tr>
      <td><code>soundlog toggle</code></td>

      <td>Toggle sound logging state</td>
    </tr>
  </table>


  <h3><a id="store_machine">store_machine / restore_machine</a></h3>

  <p>These are low-level commands, used to implement savestates.</p>

  <h4><code>store_machine</code>:</h4>
  <p>Saves the state of the specified machine to a file.</p>

  <table>
    <tr>
      <td><code>store_machine</code></td>
      <td>Save state of current machine to file "openmsxNNNN.xml.gz"</td>
    </tr>
    <tr>
      <td><code>store_machine &lt;machineID&gt;</code></td>
      <td>Save state of indicated machine to file "openmsxNNNN.xml.gz"</td>
    </tr>
    <tr>
      <td><code>store_machine &lt;machineID&gt; &lt;filename&gt;</code></td>
      <td>Save state of indicated machine to specified file</td>
    </tr>
  </table>

  <h4><code>restore_machine</code>:</h4>
  <p>Load a previously saved machine in a new machine-ID, next to the already available machines. See the section on <code><a class="internal" href="#machines">activate_machine</a></code>.</p>

  <table>
    <tr>
      <td><code>restore_machine</code></td>
      <td>Load state from last saved state in default directory</td>
    </tr>
    <tr>
      <td><code>restore_machine &lt;filename&gt;</code></td>
      <td>Load state from indicated file</td>
    </tr>
  </table>

  <div class="note">
    Note: These commands are pretty low level. The <code><a class="internal" href="#savestate">savestate</a></code> and <code><a class="internal" href="#savestate">loadstate</a></code> scripts are built on top of this and are much more convenient to use.
  </div>


  <h3><a id="test_machine">test_machine / test_all_machines / test_all_extensions</a></h3>

  <p>Test whether the given MSX machine configuration works. For example whether you have all required system ROMs for this machine. See also <code><a class="internal" href="#machines">load_machine</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>test_machine &lt;machine-config&gt;</code></td>
      <td>Test whether the given machine configuration is OK.</td>
    </tr>
  </table>

  <p>Use the convenience commands <code>test_all_machines</code> and <code>test_all_extensions</code> to get a full overview on which system ROMs you are still missing.</p>

  <h3><a id="toggle">toggle</a></h3>

  <p>Toggles any boolean (on/off) setting: if it was on, it will be turned off and vice versa.
  See also: <code><a class="internal" href="#cycle">cycle</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>toggle &lt;setting&gt;</code></td>

      <td>Toggles the specified setting</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>toggle mute</code><br />
    <code>toggle throttle</code>
  </div>

  <h3><a id="trainer">trainer</a></h3>

  <p>Control game trainers. You can enable or disable individual cheats of each trainer. Make use of the TAB key to see
  what is available. When switching trainers, the currently active trainer will be deactivated.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>trainer</code></td>

      <td>See which trainer is currently active</td>
    </tr>

    <tr>
      <td><code>trainer &lt;game&gt;</code></td>

      <td>See which cheats are currently active in the trainer</td>
    </tr>

    <tr>
      <td><code>trainer &lt;game&gt; all</code></td>

      <td>Activate all cheats in the trainer of &lt;game&gt;</td>
    </tr>

    <tr>
      <td><code>trainer &lt;game&gt; \[&lt;cheat&gt; ..\]</code></td>

      <td>Toggle cheats of &lt;game&gt; on/off</td>
    </tr>

    <tr>
      <td><code>trainer deactivate</code></td>

      <td>Deactivate all trainers</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>trainer Frogger all</code><br />
    <code>trainer "Circus Charlie" 1 2</code><br />
    <code>trainer Pippols lives "jump shoes"</code>
  </div>

  <h3><a id="type">type / type_via_keyboard</a></h3>

  <p>Type a string in the emulated MSX. This command automatically presses and
  releases keys in the simulated MSX keyboard matrix. This command is useful
  for demoing and for automating tasks in MSX-BASIC.</p>

  <p>The command has a <code>-release</code> option, with which you can specify
  that keys are always released before new ones are pressed. Some game input
  routines need this, but it also makes typing twice as slow.</p>

  <p>With the <code>-freq</code> option, you can tweak how fast typing goes and
  how long the keys will be pressed (and released if the <code>-release</code>
  option is used). Keys will be typed at the given frequency and will remain
  pressed/released for 1/freq seconds.</p>

  <p>This command should always work, because it is just like as if a user was
  actually typing on the MSX keyboard. It is therefore a bit slow, though.
  Check out the <code>type_via_keybuf</code> command if you're looking for
  something faster (but more limited in where it works). With the
  <code>default_type_proc</code> setting you can even make
  <code>type_via_keybuf</code> the standard implementation for the
  <code>type</code> command. Only do this if you really know what you're
  doing!</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>type "Hello world!"</code></td>
      <td>Yet another manifestation of the most famous program</td>
    </tr>
    <tr>
      <td><code>type "PRINT \"Hi!\"\r"</code></td>
      <td>Executes this basic command directly</td>
    </tr>
  </table>

  <p>There are also a few scripts extending this command:</p>

  <table>
    <tr>
      <td><code>type_from_file</code></td>

      <td>With this command you can automatically type text which is stored in
      the given (text) file. Mostly useful if you want to type in some
      BASIC program fragment that you found somewhere and pasted in a
      text file.
      </td>
    </tr>
    <tr>
      <td><code>type_password_from_file</code></td>

      <td>A special version of <code>type_from_file</code>, made to type in
      passwords of games, which you have stored in a file. The text
      file should have a special format: one password per line, lines
      starting with # are ignored. After the filename, you can give the
      index of the password to type (which is the index of the first
      non-comment and non-blank line in the file).
      </td>
    </tr>
  </table>

  <h3><a id="unset">unset</a></h3>

  <p>Undefines a Tcl variable. When used on openMSX settings, they are reverted to their default value. See also: <code><a class="internal" href="#set">set</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>unset &lt;variable&gt;</code></td>

      <td>Undefines the given variable</td>
    </tr>

    <tr>
      <td><code>unset &lt;setting&gt;</code></td>

      <td>Reverts the given setting to its default value</td>
    </tr>
  </table>

  <h3><a id="user_setting">user_setting</a></h3>
  <p>This command is only meant to be used in Tcl scripts. It allows to create Tcl variables that act very much like built-in openMSX settings. They have a description (can be queried with "<code>help set &lt;setting-name&gt;</code>") and their value is stored saved/restored when openMSX is quit/restarted.</p>

  <!-- do we really have to repeat the help text from the openmsx source code here? -->

  <p>Execute "<code>help user_setting</code>" to get a detailed description of this command.</p>


  <h3><a id="vdpregs">vdpregs</a></h3>

  <p>Shows the current register settings of the Video Display Processor (VDP). Related command: <code><a class="internal" href="#palette">palette</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>vdpregs</code></td>

      <td>Shows the current VDP control register contents</td>
    </tr>
  </table>


  <h3><a id="other">other</a></h3>

  <p>Most commands described above are generally useful. openMSX also has a bunch of other more specialized commands. Some of these are intended for programmers who code MSX programs using openMSX as a tool. Other of these commands are more like toys or examples that show the openMSX scripting capabilities.</p>

  <p>We've only listed a very brief overview of these commands. As always execute "<code>help &lt;command-name&gt;</code>" to get a more detailed description of the command.</p>

  <table>
    <tr>
      <td><code>about</code></td>
      <td>Search command and setting help-texts for the given keyword</td>
    </tr>
    <tr>
      <td><code>cpuregs</code></td>
      <td>Gives an overview of the CPU registers</td>
    </tr>
    <tr>
      <td><code>data_file</code></td>
      <td>Helps locate openMSX data files</td>
    </tr>
    <tr>
      <td><code>disasm</code></td>
      <td>Print disassembled instructions at the given memory location</td>
    </tr>
    <tr>
      <td><code>getcolor</code></td>
      <td>Query V99x8 palette settings</td>
    </tr>
    <tr>
      <td><code>get_active_cpu</code></td>
      <td>Returns the active cpu, z80 or r800</td>
    </tr>
    <tr>
      <td><code>get_color_count</code></td>
      <td>Gives an overview of the used colors in the current screen</td>
    </tr>
    <tr>
      <td><code>get_screen</code></td>
      <td>Capture the content of a MSX text screen in a Tcl string</td>
    </tr>
    <tr>
      <td><code>get_screen_mode</code></td>
      <td>Decodes the current screen mode from the VDP registers and returns it as a Tcl string. <code>get_screen_mode_number</code> returns it as a number which would also be used for the basic command <code>SCREEN</code>.</td>
    </tr>
    <tr>
      <td><code>get_selected_slot</code></td>
      <td>Returns the selected slot for the given memory page</td>
    </tr>
    <tr>
      <td><code>guess_title</code></td>
      <td>Use heuristics to guess the title of the current game (cartridge, disk or tape). For specific media use <code>guess_cassette_title</code>, <code>guess_disk_title</code> or <code>guess_rom_title</code>.</td>
    </tr>
    <tr>
      <td><code>listing</code></td>
      <td>Reimplementation of the BASIC LIST command in Tcl</td>
    </tr>
    <tr>
      <td><code>load_debuggable</code></td>
      <td>Write the content of a file to a openMSX debuggable</td>
    </tr>
    <tr>
      <td><code>main_menu_open</code> / <code>main_menu_close</code> / <code>main_menu_toggle</code></td>
      <td>Control the visibility of the default OSD menu</td>
    </tr>
    <tr>
      <td><code>multi_screenshot</code></td>
      <td>Take screenshots of multiple successive frames</td>
    </tr>
    <tr>
      <td><code>pc_in_slot</code></td>
      <td>Check whether CPU is executing from the specified slot (useful as breakpoint condition)</td>
    </tr>
    <tr>
      <td><code>peek</code></td>
      <td>Read a byte from the given memory location</td>
    </tr>
    <tr>
      <td><code>peek16</code></td>
      <td>Read a 16 bit word from the given memory location</td>
    </tr>
    <tr>
      <td><code>poke</code></td>
      <td>Write a byte to the given memory location. Use <code>dpoke</code> to only write if the to be written value is different from the current value.</td>
    </tr>
    <tr>
      <td><code>poke16</code></td>
      <td>Write a 16 bit word to the given memory location</td>
    </tr>
    <tr>
      <td><code>psg_log</code></td>
      <td>Log or replay PSG register values in binary format</td>
    </tr>
    <tr>
      <td><code>ram_watch</code></td>
      <td>Add or remove RAM watch addresses to/from the list on the right side of the screen, useful for debugging or TASing</td>
    </tr>
    <tr>
      <td><code>reg</code></td>
      <td>Read or write CPU registers</td>
    </tr>
    <tr>
      <td><code>reg_log</code></td>
      <td>Log or replay register values for the specified debuggable in ASCII format</td>
    </tr>
    <tr>
      <td><code>rom_info</code></td>
      <td>Gives information about the given ROM device, coming from the software database. If no argument is given, the first found (external) ROM device is assumed. This command replaces the info that was previously (before openMSX 0.8.1) automatically printed on stdout.</td>
    </tr>
    <tr>
      <td><code>run_to</code></td>
      <td>Execute instructions until the PC reaches the specified address</td>
    </tr>
    <tr>
      <td><code>save_debuggable</code></td>
      <td>Save the (partial) content of a debuggable to a file</td>
    </tr>
    <tr>
      <td><code>save_msx_screen</code></td>
      <td>Saves the current MSX screen into an MSX compatible binary file (BLOAD format).</td>
    </tr>
    <tr>
      <td><code>save_to_file</code></td>
      <td>Helper function to save data (e.g. the output of another command) to a file.</td>
    </tr>
    <tr>
      <td><code>setcolor</code></td>
      <td>Change V99x8 palette settings</td>
    </tr>
    <tr>
      <td><code>set_help_text</code></td>
      <td>Associate help text with a Tcl proc</td>
    </tr>
    <tr>
      <td><code>set_tabcompletion_proc</code></td>
      <td>Associate tab completion with a Tcl proc</td>
    </tr>
    <tr>
      <td><code>showdebuggable</code></td>
      <td>Print the content of a debuggable in a table</td>
    </tr>
    <tr>
      <td><code>showmem</code></td>
      <td>Print the content of memory in a table</td>
    </tr>
    <tr>
      <td><code>show_osd</code></td>
      <td>Print an overview of the defined OSD elements</td>
    </tr>
    <tr>
      <td><code>skip_instruction</code></td>
      <td>Skip the current CPU instruction</td>
    </tr>
    <tr>
      <td><code>sprite_viewer</code></td>
      <td>Show a widget with which you can view the sprite patterns</td>
    </tr>
    <tr>
      <td><code>stack</code></td>
      <td>Print the top of the CPU stack</td>
    </tr>
    <tr>
      <td><code>step_in</code></td>
      <td>Execute one CPU instruction, go into subroutines</td>
    </tr>
    <tr>
      <td><code>step_over</code></td>
      <td>Execute one CPU instruction, but don't go into subroutines</td>
    </tr>
    <tr>
      <td><code>step_out</code></td>
      <td>Step out of the current subroutine</td>
    </tr>
    <tr>
      <td><code>step_back</code></td>
      <td>Step one instruction back in time</td>
    </tr>
    <tr>
      <td><code>text_echo</code></td>
      <td>Echo all printed MSX text on stderr</td>
    </tr>
    <tr>
      <td><code>toggle_cursors</code></td>
      <td>Show (or hide) a widget which shows which keys are pressed</td>
    </tr>
    <tr>
      <td><code>toggle_fps</code></td>
      <td>Show (or hide) a frames-per-second (fps) indicator</td>
    </tr>
    <tr>
      <td><code>toggle_frame_counter</code></td>
      <td>Show (or hide) a widget which shows the current frame number since start-up</td>
    </tr>
    <tr>
      <td><code>toggle_freq</code></td>
      <td>Switch between PAL/NTSC</td>
    </tr>
    <tr>
      <td><code>toggle_info_panel</code></td>
      <td>Show (or hide) a panel with various types of info on the currently running MSX (emulation); similar to the info in the panel you get when using the DIGIblue theme in blueMSX</td>
    </tr>
    <tr>
      <td><code>toggle_mog_overlay</code></td>
      <td>Enable (or disable) graphical extra information and game hints when playing The Maze of Galious</td>
    </tr>
    <tr>
      <td><code>toggle_mog_editor</code></td>
      <td>Enable (or disable) wall drawing and Popolon-placement with the mouse when playing The Maze of Galious; needs to have the MoG overlay enabled, see <code>toggle_mog_overlay</code></td>
    </tr>
    <tr>
      <td><code>toggle_music_keyboard</code></td>
      <td>Enable (or disable) keyboard view of all existing music channels. EXPERIMENTAL! Be careful, it's very slow when many channels are present in the system</td>
    </tr>
    <tr>
      <td><code>toggle_nemesis_1_shield</code></td>
      <td>Enable (or disable) an OSD drawn shield in Nemesis (Gradius) 1, all enemy objects will repel from it</td>
    </tr>
    <tr>
      <td><code>toggle_osd_keyboard</code></td>
      <td>Show (or hide) an on-screen keyboard (mostly useful for devices without physical keyboard); only supports an international keyboard-layout for now</td>
    </tr>
    <tr>
      <td><code>toggle_psg2scc</code></td>
      <td>Enable (or disable) playing PSG sound on SCC</td>
    </tr>
    <tr>
      <td><code>toggle_reversebar</code></td>
      <td>Show (or hide) the reverse bar, which helps to control and view the data of the <a class="internal" href="#reverse">reverse</a> feature, which is automatically enabled when the bar is enabled</td>
    </tr>
    <tr>
      <td><code>toggle_scc_editor</code></td>
      <td>Show a graphical view of the SCC chip(s) of the system, showing waveforms and volume per channel and also enables you to edit the waveforms per channel</td>
    </tr>
    <tr>
      <td><code>toggle_scc_viewer</code></td>
      <td>Show a graphical view of the SCC chip(s) of the system, showing waveforms and volume per channel</td>
    </tr>
    <tr>
      <td><code>toggle_show_palette</code></td>
      <td>Show (or hide) a graphical view on the palette registers</td>
    </tr>
    <tr>
      <td><code>toggle_tron</code></td>
      <td>Show (or hide) an OSD implementation of the MSX-BASIC TRON command to trace what the current line number of the BASIC interpreter is</td>
    </tr>
    <tr>
      <td><code>toggle_vdp_access_test</code></td>
      <td>Enable (or disable) reporting in the console when VDP I/O is done which could possibly cause data corruption on the slowest VDP (TMS9xxx), which is not emulated</td>
    </tr>
    <tr>
      <td><code>toggle_vdp_busy</code></td>
      <td>Enable (or disable) display on the OSD how busy the VDP is</td>
    </tr>
    <tr>
      <td><code>toggle_vdp_reg_viewer</code></td>
      <td>Enable (or disable) a widget that shows an overview of all VDP registers and highlights changes in the values</td>
    </tr>
    <tr>
      <td><code>toggle_vu_meters</code></td>
      <td>Show (or hide) a graphical view of the volumes of the sound channels of several sound chips</td>
    </tr>
    <tr>
      <td><code>type_via_keybuf</code></td>
      <td>Alternative to the <code>type_via_keyboard</code> (the default <code><a class="internal" href="#type">type</a></code> command), that uses the keyboard buffer; only works if the running software uses the standard keyboard buffer functions to get keyboard input, but is much faster</td>
    </tr>
    <tr>
      <td><code>umrcallback</code></td>
      <td>Example proc to use with the umr_callback setting</td>
    </tr>
    <tr>
      <td><code>vdpcmdinprogresscallback</code></td>
      <td>Example proc to use with the vdpcmdinprogress_callback setting</td>
    </tr>
    <tr>
      <td><code>v9990reg</code></td>
      <td>Read or write a V9990 register</td>
    </tr>
    <tr>
      <td><code>v9990regs</code></td>
      <td>Print an overview of all V9990 registers</td>
    </tr>
    <tr>
      <td><code>vdpreg</code></td>
      <td>Read or write a V99x8 register</td>
    </tr>
    <tr>
      <td><code>vdrive</code></td>
      <td>Easily switch disks in multi-disk games</td>
    </tr>
    <tr>
      <td><code>vgm_rec</code></td>
      <td>Record the music played by PSG, MSX-MUSIC, MSX-AUDIO, OPL4 and SCC into a VGM file</td>
    </tr>
    <tr>
      <td><code>vpeek/vpoke</code></td>
      <td>Read/write bytes from/to video RAM</td>
    </tr>
  </table>

  <p>The source code of all these scripts is located in <code>share/scripts</code> directory. Feel free to inspect these scripts and modify them to suit your needs.</p>

  <h2><a id="settings">Settings</a></h2>

  <p>Settings control many aspects of openMSX. Below, the available settings are listed and described. You can change setting values with the <code><a class="internal" href="#set">set</a></code> command.</p>

  <h3><a id="accuracy">accuracy</a></h3>

  <p>Sets the render accuracy. openMSX supports three levels of render accuracy:</p>

  <dl>
    <dt>screen accurate:</dt>
    <dd>Changes in VDP state become effective only once per video frame. Works well for most MSX1 software, but will break a lot of MSX2 software (anything that does so-called raster effects).</dd>

    <dt>line accurate:</dt>
    <dd>Changes in VDP state become effective only once per display line. Works well for almost all software.</dd>

    <dt>pixel accurate:</dt>
    <dd>Changes in VDP state become effective immediately. In this mode even the 'Unknown Reality scope part' is rendered correctly.</dd>
  </dl>

  <p>In some cases switching to a lower accuracy level can speed up emulation, but in many cases the speed difference is negligible.</p>

  <p>The default is pixel accuracy, since this is the most realistic. If the software you are running shows a jittery screen split and you would prefer a stable screen split, switching to line accuracy can help.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set accuracy</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set accuracy screen</code></td>

      <td>Selects screen accurate rendering</td>
    </tr>

    <tr>
      <td><code>set accuracy line</code></td>

      <td>Selects line accurate rendering</td>
    </tr>

    <tr>
      <td><code>set accuracy pixel</code></td>

      <td>Selects pixel accurate rendering</td>
    </tr>
  </table>

  <h3><a id="audio-inputfilename">audio-inputfilename</a></h3>

  <p>Sets the audio file from which the wave input is read for the sampler.</p>

  <p>By default, it is read from "audio-input.wav" when available.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set audio-inputfilename</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set audio-inputfilename mysample.wav</code></td>

      <td>Read from "mysample.wav"</td>
    </tr>
  </table>

  <div class="note">
    Note: The file is fully read into memory, so under Linux/UNIX do not attempt to read from a device node such as <code>/dev/dsp</code>.
  </div>

  <h3><a id="autoruncassettes">autoruncassettes</a></h3>

  <p>Switches the "auto-run cassettes" feature on or off. When it's enabled, openMSX will try to type the proper loading
  instruction when a cassette is inserted.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set autoruncassettes</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set autoruncassettes on</code></td>

      <td>Try to run cassettes automatically</td>
    </tr>

    <tr>
      <td><code>set autoruncassettes off</code></td>

      <td>Do nothing when cassettes are inserted</td>
    </tr>
  </table>

  <div class="note">
    Note: Autorun is only supported for cassette images in the CAS format.
  </div>

  <h3><a id="autorunlaserdisc">autorunlaserdisc</a></h3>

  <p>Switches the "auto-run laserdisc" feature on or off. When it's enabled, openMSX will try to type the proper loading
  instruction when a laserdisc is inserted.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set autorunlaserdisc</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set autorunlaserdisc on</code></td>

      <td>Try to load Laserdiscs automatically</td>
    </tr>

    <tr>
      <td><code>set autorunlaserdisc off</code></td>

      <td>Do nothing when Laserdiscs are inserted</td>
    </tr>
  </table>

  <h3><a id="auto_enable_reverse">auto_enable_reverse</a></h3>

  <p>Using the <code><a class="internal" href="#reverse">reverse</a></code> feature has a small memory and performance cost. Therefore it has to be enabled before it can be used. This setting controls whether the reverse feature should automatically be activated when openMSX starts. On desktop computers this generally won't be a problem. But for small handheld devices it can be.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set auto_enable_reverse</code></td>
      <td>Shows the current setting</td>
    </tr>
    <tr>
      <td><code>set auto_enable_reverse off</code></td>
      <td>Don't automatically enable the reverse feature</td>
    </tr>
    <tr>
      <td><code>set auto_enable_reverse on</code></td>
      <td>Enable the reverse feature when openMSX starts</td>
    </tr>
    <tr>
      <td><code>set auto_enable_reverse gui</code></td>
      <td>Enable the reverse feature and the reverse bar when openMSX starts. Default setting for Desktop/PC</td>
    </tr>
  </table>

  <h3><a id="auto_save_replay">auto_save_replay</a></h3>

  <p>Enable this setting to make automatic backups of your current replay. The replay is saved to the filename specified in the <code>auto_save_replay_filename</code> setting (default: "auto_save") at an interval as specified by the <code>auto_save_replay_interval</code> setting (default: 30 seconds). The interval is in real clock time, not in MSX time.</p>

  <h3><a id="blur">blur</a></h3>

  <p>Sets the amount of horizontal blur effect. A value of 0 turns off blur, while 100 selects maximum blur.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set blur</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set blur &lt;value&gt;</code></td>

      <td>Change the value</td>
    </tr>
  </table>

  <div class="note">
    Note: Only some <a class="internal" href="#scale_algorithm">scale algorithms</a> apply horizontal blur; the default algorithm "simple" does.
  </div>

  <h3><a id="bootsector">bootsector</a></h3>

  <p>Sets the boot sector type for DirAsDSK. Default: DOS2. Only relevant on turboR, because it boots differently
  depending on the type of boot sector on the disk in drive A.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set bootsector</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set bootsector DOS1</code></td>

      <td>Use a DOS1 boot sector</td>
    </tr>
  </table>

  <h3><a id="brightness">brightness</a></h3>

  <p>Controls the brightness of the video output. Can be between -100 and 100. Lower values are darker, higher values are brighter. The default is 0, which is neutral. This setting shifts the brightness of all colors, including black and white, while the <code><a class="internal" href="#gamma">gamma</a></code> setting changes the relative brightness of colors but does not change black and white.</p>

  <p>The section about the <code><a class="internal" href="#noise">noise</a></code> setting describes a typical way of using <code>brightness</code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set brightness</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set brightness 5</code></td>

      <td>Make the video output a bit brighter than default</td>
    </tr>
  </table>

  <h3><a id="cmdtiming">cmdtiming</a></h3>

  <p>Controls VDP command execution timing.</p>

  <p>This is useful for debugging and for speeding up games where the command engine performance is a bottleneck.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set cmdtiming</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set cmdtiming broken</code></td>

      <td>Make VDP commands finish instantly</td>
    </tr>

    <tr>
      <td><code>set cmdtiming real</code></td>

      <td>Make VDP commands take a realistic amount of time</td>
    </tr>
  </table>

  <div class="note">
    Note: When set to <code>broken</code> the emulated MSX acts different from a real MSX. This might cause some software to fail.
  </div>

  <h3><a id="color_matrix">color_matrix</a></h3>

  <p>This setting represents a 3&times;3 matrix that is used to transform MSX RGB colors to host RGB colors. This setting can
  be used to generate all kind of color schemes, see <code>scripts/monitor.tcl</code> for examples.</p>

  <p>To get the following color transformation:</p>
  <pre>
        | a b c |   | Rm |   | Rh |
        | d e f | &times; | Gm | = | Gh |
        | g h i |   | Bm |   | Bh |
  </pre>
  <p>Use this command:</p>
  <pre>
        set color_matrix { { a b c } { d e f } { g h i } }
  </pre>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set color_matrix</code></td>

      <td>Shows the current value</td>
    </tr>

    <tr>
      <td><code>set color_matrix { { 1 0 0 } { 0 1 0 } { 0 0 1 } }</code></td>

      <td>This is the default (no color transformation)</td>
    </tr>

    <tr>
      <td><code>set color_matrix { { .33 .33 .33 } { .33 .33 .33 } { .33 .33 .33 } }</code></td>

      <td>Transform to grey scale</td>
    </tr>
  </table>

  <div class="note">
    Note: It is often more convenient to use the <code><a class="internal" href="#monitor_type">monitor_type</a></code> command.
  </div>

  <h3><a id="console">console</a></h3>

  <p>Turns the openMSX on-screen console on or off.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set console</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set console on</code></td>

      <td>Turns the console on</td>
    </tr>

    <tr>
      <td><code>set console off</code></td>

      <td>Turns the console off</td>
    </tr>
  </table>

  <h3><a id="consolebackground">consolebackground</a></h3>

  <p>Change the console background image. Only images in the PNG format are supported. Background images may also have an alpha channel (amount of transparency per pixel).</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set consolebackground</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set consolebackground &lt;image&gt;</code></td>

      <td>Sets a new background image</td>
    </tr>
  </table>

  <h3><a id="consolecolumns">consolecolumns</a></h3>

  <p>Change the width of the console measured by the number of columns.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set consolecolumns</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set consolecolumns &lt;value&gt;</code></td>

      <td>Set the specified width</td>
    </tr>
  </table>

  <h3><a id="consolefont">consolefont</a></h3>

  <p>Change the console font. This should be the filename of a True Type Font. The default value is <code>skins/VeraMono.ttf.gz</code>.</p>
  <p>Font files of other types than True Type Fonts (TTF) are not supported. The font must also be monospaced.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set consolefont</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set consolefont &lt;myfont.ttf&gt;</code></td>

      <td>Sets a new font</td>
    </tr>
  </table>

  <h3><a id="consolefontsize">consolefontsize</a></h3>

  <p>Set the size for the console font. The default value is 12.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set consolefontsize</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set consolefontsize 16</code></td>

      <td>Set a bigger than default font size</td>
    </tr>
  </table>

  <h3><a id="console_history_size">console_history_size</a></h3>

  <p>Determines how many commands are saved into the console history.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set console_history_size</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set console_history_size 5000</code></td>

      <td>Keep a maximum of 5000 commands in the console history</td>
    </tr>
  </table>

  <h3><a id="consoleplacement">consoleplacement</a></h3>

  <p>Changes the position of the console on the emulator screen.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set consoleplacement</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set consoleplacement &lt;place&gt;</code></td>

      <td>Moves the console to the specified location; <code>&lt;place&gt;</code> can be <code>topleft</code>, <code>top</code>, <code>topright</code>, <code>left</code>, <code>center</code>, <code>right</code>, <code>bottomleft</code>, <code>bottom</code> or <code>bottomright</code>.</td>
    </tr>
  </table>

  <h3><a id="consolerows">consolerows</a></h3>

  <p>Change the height of the console measured by the number of rows.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set consolerows</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set consolerows &lt;value&gt;</code></td>

      <td>Set the specified number of rows</td>
    </tr>
  </table>

  <h3><a id="console_remove_doubles">console_remove_doubles</a></h3>

  <p>Determines whether the console history remembers two identical subsequent commands.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set console_remove_doubles</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set console_remove_doubles on</code></td>

      <td>Remove (do not remember) the last command if it's the same as the previous (default)</td>
    </tr>

    <tr>
      <td><code>set console_remove_doubles off</code></td>

      <td>Allow double subsequent command entries in the console history</td>
    </tr>
  </table>

  <h3><a id="contrast">contrast</a></h3>

  <p>Controls the contrast of the video output. Can be between -100 and 100. Lower values are less contrast, higher values are more contrast. The default is 0, which is neutral.</p>

  <p>The section about the <code><a class="internal" href="#noise">noise</a></code> setting describes a typical way of using <code>contrast</code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set contrast</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set contrast -5</code></td>

      <td>Reduce the video contrast a bit</td>
    </tr>
  </table>

  <h3><a id="cputrace">cputrace</a></h3>

  <p>Enable/disable CPU instruction tracing. When enabled, the state of the CPU (Z80/R800) is printed on stdout after every instruction. This creates a lot of output and slows down emulation considerably, but it can be very useful for debugging.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set cputrace</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set cputrace on</code></td>

      <td>Enables CPU tracing</td>
    </tr>

    <tr>
      <td><code>set cputrace off</code></td>

      <td>Disables CPU tracing</td>
    </tr>
  </table>

  <h3><a id="debugoutput">debugoutput</a></h3>

  <p>Selects the file to where the output from the debug device goes.</p>

  <p>The User's Manual <a class="external" href="user.html#debugdevice">describes the debug device</a> in more detail.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set debugoutput</code></td>

      <td>Shows the current output file name</td>
    </tr>

    <tr>
      <td><code>set debugoutput stdout</code></td>

      <td>Writes debug output to openMSX's standard output stream</td>
    </tr>

    <tr>
      <td><code>set debugoutput stderr</code></td>

      <td>Writes debug output to openMSX's standard error stream</td>
    </tr>

    <tr>
      <td><code>set debugoutput &lt;output file&gt;</code></td>

      <td>Writes debug output to the specified file</td>
    </tr>
  </table>

  <div class="note">
    Note: This setting only exists if the <code>debugdevice</code> extension is present in the current MSX machine.
  </div>

  <h3><a id="default_machine">default_machine</a></h3>

  <p>Selects the default MSX model. openMSX uses this machine when it is started without the <code>-machine</code> option. This is a typical setting that should be saved, see also <a class="internal" href="#save_settings"><code>save_settings</code></a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set default_machine</code></td>

      <td>Shows current setting</td>
    </tr>

    <tr>
      <td><code>set default_machine Panasonic_FS-A1GT</code></td>

      <td>Use the turboR GT the next time openMSX is started</td>
    </tr>
  </table>

  <h3><a id="DirAsDSKmode">DirAsDSKmode</a></h3>

  <p>Determine the behavior of the DirAsDSK when inserting a directory to be used as diskimage.</p>

  <p>The possible values are <code>read_only</code> and <code>full</code>. The default mode is <code>full</code>.</p>

  <table>
    <tr>
      <td><code>read_only</code></td>
      <td>The MSX can not write to the virtual disk.<br/>Changes on the host-OS are still reflected on the virtual disk, however.</td>
    </tr>
    <tr>
      <td><code>full</code></td>
      <td>All changes are performed both ways, no restrictions apply.</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set DirAsDSKmode</code></td>
      <td>Shows the current setting</td>
    </tr>
    <tr>
      <td><code>set DirAsDSKmode read_only</code></td>
      <td>Disk image will be read only</td>
    </tr>
  </table>

  <div class="note">
    Note: this setting is only used when the directory is inserted, it is not possible to change the behaviour of the current virtual disk by altering the setting. The new setting will become effective after the current virtual disk has been ejected.
  </div>


  <h3><a id="deflicker">deflicker</a></h3>

  <p>Turns deflicker on/off. deflicker is a filter which tries to detect pixels
  that alternate each frame between two different color values and replaces
  those alternations with the average color. It gives a very nice result for
  software (mostly demos) that use this technique to get the optical illusion
  of more colors than are actually supported by the hardware. It also works
  well in games with flickering sprites on a static background (like Maze of
  Galious). This setting is disabled by default because there aren't that many
  situations were it really improves video quality and it does have a
  performance cost. </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set deflicker</code></td>
      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set deflicker on</code></td>
      <td>Turns deflicker on</td>
    </tr>

    <tr>
      <td><code>set deflicker off</code></td>
      <td>Turns deflicker off</td>
    </tr>
  </table>


  <h3><a id="deinterlace">deinterlace</a></h3>

  <p>Turns deinterlacing on/off. Deinterlace is a filter which combines the even and odd field of interlaced video into a single frame which has double vertical resolution. It results in a sharp and stable image, but can show artifacts on fast animations.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set deinterlace</code></td>
      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set deinterlace on</code></td>
      <td>Turns deinterlacing on</td>
    </tr>

    <tr>
      <td><code>set deinterlace off</code></td>
      <td>Turns deinterlacing off</td>
    </tr>
  </table>

  <div class="note">
    Note: Deinterlacing is only supported for <code><a class="internal" href="#scale_factor">scale_factors</a></code> bigger or equal to 2.
  </div>


  <h3><a id="disablesprites">disablesprites</a></h3>

  <p>Can be used to disable sprite rendering. Only the rendering itself is
     disabled, all other MSX behaviour (like sprite collision detection) stays
     the same.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set disablesprites</code></td>
      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set disablesprites on</code></td>
      <td>Disable sprite rendering</td>
    </tr>

    <tr>
      <td><code>set disablesprites off</code></td>
      <td>Enable sprite rendering (the default)</td>
    </tr>
  </table>


  <h3><a id="display_deform">display_deform</a></h3>

  <p>Select display deformation effect. This effect is only supported in the SDLGL-PP renderer.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set display_deform</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set display_deform normal</code></td>

      <td>Turns off display deform</td>
    </tr>

    <tr>
      <td><code>set display_deform 3d</code></td>

      <td>Deforms the image in 3D, to look like a CRT (like JEmu2)</td>
    </tr>
  </table>

  <div class="note">
    Note: In the past there was also a 'horizontal_stretch' mode. This is now replaced by the <code><a class="internal" href="#horizontal_stretch">horizontal_stretch</a></code> setting.
  </div>


  <h3><a id="di_halt_callback">di_halt_callback</a></h3>

  <p>Selects the Tcl procedure to be called when the running MSX software has executed a HALT instruction while the interrupts are disabled (DI).</p>

  <p>The default openmsx startup scripts initialize this setting with a proc that prints a warning message.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set di_halt_callback</code></td>
      <td>Shows the current setting</td>
    </tr>
    <tr>
      <td><code>set di_halt_callback my_callback_proc</code></td>
      <td>Sets a new callback proc</td>
    </tr>
  </table>


  <h3><a id="enable_session_management">enable_session_management</a></h3>

  <p>Controls session management. When enabled, openMSX will store the state of all machines when you exit openMSX and restore that state again when starting it up next time. Note that the reverse history is not saved.
  </p>

  <p>Sessions can also be saved manually with the command <code>save_session</code>, and explicitly loaded with <code>load_session</code>. A list of saved sessions can be retrieved with <code>list_sessions</code>.
  </p>

  <h3><a id="frequency">frequency</a></h3>

  <p>Sets the sound mixer frequency. Sound hardware and sound APIs typically support a limited set of frequencies, such as 11025 Hz, 22050 Hz, 44100 Hz and 48000 Hz.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set frequency</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set frequency 44100</code></td>

      <td>Use 44.1 kHz mixing frequency (CD quality)</td>
    </tr>
  </table>


  <h3><a id="firmwareswitch">firmwareswitch</a></h3>

  <p>Some machines (e.g. turboR) have a switch on the front (or on the back) that controls if the machine should boot
  'normally' or start the built-in software, also called firmware. This setting controls the position of that
  switch.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set firmwareswitch</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set firmwareswitch on</code></td>

      <td>Boot into the internal software</td>
    </tr>

    <tr>
      <td><code>set firmwareswitch off</code></td>

      <td>Boot into MSX-BASIC or on-disk software</td>
    </tr>
  </table>

  <h3><a id="fullscreen">fullscreen</a></h3>

  <p>Switch to/from fullscreen mode.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set fullscreen</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set fullscreen on</code></td>

      <td>Switch to fullscreen mode</td>
    </tr>

    <tr>
      <td><code>set fullscreen off</code></td>

      <td>Switch to windowed mode</td>
    </tr>
  </table>

  <h3><a id="fullspeedwhenloading">fullspeedwhenloading</a></h3>

  <p>When enabled, openMSX will try to detect when the MSX is loading from diskette, cassette or laserdisc. During loading openMSX will run at full speed (<code><a class="internal" href="#throttle">throttle</a></code> off). This can be convenient if you're not interested in the realistic but slow loading times on MSX. Default is off, because it is not according to the behaviour of a real MSX.</p>

  <p>Unlike the fast loading features in for example fMSX, <code>fullspeedwhenloading</code> does not intercept BIOS calls. Instead, it speeds up the emulation of the entire MSX, including all hardware devices.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set fullspeedwhenloading</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set fullspeedwhenloading on</code></td>

      <td>Load as fast as possible</td>
    </tr>

    <tr>
      <td><code>set fullspeedwhenloading off</code></td>

      <td>Load at the same speed as a real MSX</td>
    </tr>
  </table>

  <h3><a id="gamma">gamma</a></h3>

  <p>Sets the amount of gamma correction. A value of 1.0 will turn off gamma correction. Lower values will result in a darker image, higher values in a brighter image.</p>

  <p>If you want to get a realistic picture, set the openMSX gamma correction to <i>PC gamma / MSX gamma</i>. TVs use a standardised gamma of 2.5, let's take that as the value of <i>MSX gamma</i>. You can measure the gamma of your PC screen with a simple test such as the Gamma Measurement Image in <a class="external" href="https://web.archive.org/web/20150714015749/http://www.bberger.net/rwb/gamma.html">Robert W. Berger's "An Explanation of Monitor Gamma"</a>. If your <i>PC gamma</i> would be for example 2.0, the most realistic value for gamma correction would be 2.0 / 2.5 = 0.8.</p>

  <p>Alternatively, you can just try a few values and see what you like.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set gamma</code></td>

      <td>Shows the current value</td>
    </tr>

    <tr>
      <td><code>set gamma &lt;num&gt;</code></td>

      <td>Sets a new gamma correction amount</td>
    </tr>
  </table>

  <h3><a id="glow">glow</a></h3>

  <p>Sets the amount of afterglow effect: 0 is off and 100 is a very heavy afterglow.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set glow</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set glow &lt;value&gt;</code></td>

      <td>Change the amount of afterglow</td>
    </tr>
  </table>

  <div class="note">
    Note: Not all renderers support this.
  </div>

  <h3><a id="grabinput">grabinput</a></h3>

  <p>Controls whether openMSX grabs all input events or not. When this setting is turned on, all input events are directly passed to openMSX. The mouse pointer can't leave the openMSX window and the window manager won't be able to react to keyboard shortcuts.</p>

   <p>You can turn this setting on when you want to use mouse-controlled MSX software while openMSX is in windowed mode. It is best turned off in all other cases. See also <a class="internal" href="#escape_grab"><code>escape_grab</code></a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set grabinput</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set grabinput on</code></td>

      <td>Starts grabbing all input events</td>
    </tr>

    <tr>
      <td><code>set grabinput off</code></td>

      <td>Stops grabbing all input events</td>
    </tr>
  </table>

  <h3><a id="horizontal_stretch">horizontal_stretch</a></h3>

  <p>Sets the amount of horizontal stretch, thus also the aspect ratio of the screen. More specifically, a setting of <code>n</code> means stretch the center <code>n</code> MSX pixels to the full width of the host output window (at <code><a class="internal" href="#scale_factor">scale_factor</a></code> 1).</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set horizontal_stretch</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set horizontal_stretch &lt;value&gt;</code></td>

      <td>Change the amount of horizontal stretch</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples of typical useful values:
  </div>

  <div class="examples">
    <code>set horizontal_stretch 320</code> (no horizontal stretch)<br />
    <code>set horizontal_stretch 272</code> (approach real aspect ratio of MSX screen)<br />
    <code>set horizontal_stretch 280</code> (default: show all generated border pixels, so that all border demo effects are still visible)<br />
    <code>set horizontal_stretch 256</code> (borders are not visible at all; doesn't work well in combination with set-adjust)
  </div>

  <div class="note">
    Note: when using the SDL renderer, this setting may cause a lot more CPU usage (e.g. on a Dingoo) when not using the value 320.
  </div>

  <h3><a id="inputdelay">inputdelay</a></h3>

  <p>Input events for the MSX machine are delayed by this amount. Increase this value when the MSX machine misses keyboard presses when you type very fast. Decrease this value to reduce the latency between pressing a key on the host machine and seeing it being typed in the MSX machine.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set inputdelay</code></td>
      <td>Shows the current value</td>
    </tr>
    <tr>
      <td><code>set inputdelay &lt;time&gt;</code></td>
      <td>Sets the input delay to the specified number of seconds</td>
    </tr>
  </table>

  <div class="note">
    Note: The default value of 0.0 seconds (no extra delay) should almost
    always be OK. It only makes sense to increase this setting if you have
    a slow host machine and you're typing text very fast and the emulated
    MSX machine misses (some of) the keys you typed.
  </div>


  <h3><a id="interleave_black_frame">interleave_black_frame</a></h3>

  <p>Insert a black frame in between each normal MSX frame. Useful on (100Hz+)
  lightboost enabled monitors to reduce motion blur and double frame
  artifacts.</p>

  <p>Make sure you configure your monitor to use a refresh rate of 100Hz (for a
  PAL MSX machine) or to 120Hz (for a NTSC machine). The brightness will
  decrease, so adjust the <a class="internal" href="#gamma">gamma</a>,
  <a class="internal" href="#brightness">brightness</a> and
  <a class="internal" href="#contrast">contrast</a> settings to compensate.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set interleave_black_frame</code></td>
      <td>Shows the current value</td>
    </tr>
    <tr>
      <td><code>set interleave_black_frame true</code></td>
      <td>Enable this feature.</td>
    </tr>
  </table>


  <h3><a id="invalid_ppi_mode_callback">invalid_ppi_mode_callback</a></h3>

  <p>Selects the Tcl procedure to be called when the running MSX software has selected an invalid PPI mode. Or at least a PPI mode that's not yet correctly emulated. Typically on a real machine these modes will hang the MSX.</p>

  <p>The default openmsx startup scripts initialize this setting with a proc that prints a warning message just once. Though if you're a developer you may want to change this to always print the warning or automatically break emulation when this happens so you can debug the problem.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set invalid_ppi_mode_callback</code></td>
      <td>Shows the current setting</td>
    </tr>
    <tr>
      <td><code>set invalid_ppi_mode_callback my_callback_proc</code></td>
      <td>Sets a new callback proc</td>
    </tr>
  </table>


  <h3><a id="invalid_psg_directions_callback">invalid_psg_directions_callback</a></h3>

  <p>Selects the Tcl procedure to be called when the running MSX software has selected invalid PSG port directions (port A should always be set as input).</p>

  <p>The default openmsx startup scripts initialize this setting with a proc that prints a warning message just once. Though if you're a developer you may want to change this to always print the warning or automatically break emulation when this happens so you can debug the problem.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set invalid_psg_directions_callback</code></td>
      <td>Shows the current setting</td>
    </tr>
    <tr>
      <td><code>set invalid_psg_directions_callback my_callback_proc</code></td>
      <td>Sets a new callback proc</td>
    </tr>
  </table>


  <h3><a id="joystickN_config">joystick&lt;n&gt;_config</a></h3>

  <p>This setting configures how the buttons/axis of the host joystick(s) are
  mapped to the corresponding inputs of the emulated MSX joystick(s). For many
  joysticks the initial value of this setting provides an acceptable default
  mapping. But depending on your joystick type and taste you may want to tweak
  it.</p>

  <p>The value of this setting is a Tcl dictionary. This means it's a list of
  key/value pairs where each even element is a key and each odd element is the
  corresponding value. The keys in this dictionary represent the 6 possible MSX
  joystick inputs. Possible key values are <code>LEFT</code>,
  <code>RIGHT</code>, <code>UP</code>, <code>DOWN</code>, <code>A</code> and
  <code>B</code>. The corresponding dictionary-values are lists of host
  joystick inputs. Possible elements for these lists are
  <code>button&lt;n&gt;</code>, <code>+axis&lt;n&gt;</code>,
  <code>-axis&lt;n&gt;</code> and <code>{L,R,U,D}_hat&lt;n&gt;</code>.</p>

  <p>Let's explain this with an example. The following is the default value for
  this setting:<br/>
  &nbsp;<code>LEFT -axis0  RIGHT +axis0  UP -axis1  DOWN +axis1  A {button0 button2}  B {button1 button3}</code><br/>
  Axis 0 is usually the primary X-axis of the host joystick. When that axis is
  moved towards negative values the LEFT input switch on the emulated joystick
  is activated. When it is moved towards positive values the RIGHT MSX input
  switch is activated. Similarly host axis1 is mapped to the UP and DOWN MSX
  inputs. The (default) configuration for the buttons is slightly more
  complicated. Here both host button 0 and 2 will activate MSX button A, and
  both button 1 and 3 will activate MSX button B. (This example shows a host
  joystick with 4 buttons, but in general (by default) all even host buttons
  will active MSX button A and all odd host buttons will active MSX button
  B).</p>

  <p>There are no restrictions on the possible mappings. For example it is
  allowed to map host axis/buttons to MSX buttons/axis or vice-versa. This
  allows to for example map a host joypad (which acts like 4 buttons) to the
  MSX directional inputs. (Technically speaking the MSX axis inputs LEFT,
  RIGHT, UP and DOWN are just 4 input switches, just like the buttons A and B
  are just 2 input switches). It's also allowed to map the same host action to
  multiple MSX inputs. This allows to for example make one specific host button
  press both MSX buttons simultaneously (e.g. to have a 'crouch button' in
  Metal Gear).</p>

  <p>It is possible to set this setting directly using the <code>set</code>
  command, but often using the Tcl <code>dict</code> command is more
  convenient. See below for some examples.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set joystick1_config</code></td>
      <td>Shows the current configuration of the first joystick</td>
    </tr>
    <tr>
      <td><code>dict set joystick1_config A button5</code></td>
      <td>(Re)map MSX button A to (only) host button 5. Leave the mapping of the
      other MSX inputs unchanged.</td>
    </tr>
    <tr>
      <td><code>dict set joystick1_config A {button0 button2}<br/>
                dict set joystick1_config B {button1 button2}</code></td>
      <td>Map button 0 to A, 1 to B and 2 to A+B. So pressing host button 2
      will press both MSX buttons.</td>
    </tr>
    <tr>
      <td><code>dict set joystick1_config LEFT  {-axis0 -axis2 button10}<br/>
                dict set joystick1_config RIGHT {+axis0 +axis2 button11}<br/>
                dict set joystick1_config UP    {-axis1 -axis3 button12}<br/>
                dict set joystick1_config DOWN  {+axis1 +axis3 button13}</code></td>
      <td>Map 2 pairs of axis and 1 keypad (4 buttons) to the MSX direction inputs.</td>
    </tr>
    <tr>
      <td><code>dict lappend joystick1_config LEFT  L_hat0<br/>
                dict lappend joystick1_config RIGHT R_hat0<br/>
                dict lappend joystick1_config UP    U_hat0<br/>
                dict lappend joystick1_config DOWN  D_hat0</code></td>
      <td>Additionally map hat0 to the 4 MSX directions.</td>
    </tr>
  </table>


  <h3><a id="joystickN_deadzone">joystick&lt;n&gt;_deadzone</a></h3>

  <p>This setting configures how big the dead center zone of an (analogue)
  joystick is. This is expressed as a percentage: 0 means no dead zone, 100
  means everything falls inside the dead zone.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set joystick1_deadzone</code></td>
      <td>Shows the current size of the dead zone of the first joystick</td>
    </tr>
    <tr>
      <td><code>set joystick1_deadzone 25</code></td>
      <td>Set the size of the dead zone to &frac14; of the total range</td>
    </tr>
  </table>


  <h3><a id="kbd_auto_toggle_code_kana_lock">kbd_auto_toggle_code_kana_lock</a></h3>

  <p>Switches the "Automatically toggle the CODE/KANA lock" feature on or off. When it's on, openMSX will
  automatically toggle the CODE/KANA lock when a user enters a character for which the CODE/KANA lock
  state must be changed.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set kbd_auto_toggle_code_kana_lock</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_auto_toggle_code_kana_lock&nbsp;on</code></td>

      <td>Automatically toggle the CODE/KANA lock when required</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_auto_toggle_code_kana_lock&nbsp;off</code></td>

      <td>Only toggle CODE/KANA lock status when user presses the CODE/KANA lock key</td>
    </tr>
  </table>

  <div class="note">
    Note: This only works on MSX models for which the CODE/KANA key locks (e.g. Japanese MSX models and the Philips VG8010). On other models, this setting is ignored.
  </div>

  <h3><a id="kbd_code_kana_host_key">kbd_code_kana_host_key</a></h3>

  <p>Host key that maps to the MSX CODE/KANA key. By default right-ALT (RALT) key.</p>
  <p>It is especially useful for
  people with AZERTY host keyboard, on which the RALT key has a special function; on
  azerty keyboards it is called the ALT-GR key and not the right-ALT key and it's used to
  enter some special characters (some keys are tagged with 3 characters; normal, key+SHIFT, key+ALT-GR).</p>
  <p>It is also useful for people with a Japanese (jp106) keyboard; they can map the HENKAN_MODE key (which is similar to the KANA Lock on Japanese MSX models) to the CODE/KANA key.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set&nbsp;kbd_code_kana_host_key</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_code_kana_host_key&nbsp;MENU</code></td>

      <td>Binds the <a class="external" href="http://en.wikipedia.org/wiki/Menu_key">MENU key</a> on the host keyboard to the MSX CODE/KANA key</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_code_kana_host_key&nbsp;HENKAN_MODE</code></td>

      <td>Binds the HENKAN_MODE key on the host keyboard to the MSX CODE/KANA key</td>
    </tr>
  </table>

  <h3><a id="kbd_deadkey1_host_key">kbd_deadkey1_host_key</a></h3>

  <p>Host key that maps to the (1st) dead key. By default right-CTRL (RCTRL) key.</p>
  <p>Some MSX models have one dead key that can be used to enter accented charachters. For example the MSX
  models sold in the Netherlands have a dead key that has following four accents printed on it: ` &#xb4; ^ &#xa8;.
  On the other hand, the Brazilian Gradiente Expert XP-800 has following four accents on its
  dead key: ` &#xb4; ^ <sup>~</sup>.</p>
  <p>There are also some MSX models with multiple dead keys like for example the Brazilian Gradiente Expert Plus,
  which has two dead keys and the different Sharp Hotbit models that have three dead keys. On such machines,
  this setting is for the first dead key which can be used to enter following two accents: &#xb4; `.</p>
  <p>In order to enter an accented character on the MSX, you first have to press and release the dead key, optionally
  together with SHIFT, CODE or CODE+SHIFT and then the correct character. The combination with CODE or CODE+SHIFT is
  only relevant for the MSX models with a single dead key that can be used to enter four different accents.</p>
  <p>Following table shows for example how to
  enter respectively &#xf9;, &#xfa;, &#xfb; or &#xfc; on the MSX models sold in the Netherlands:</p>
  <table>
	  <tr><th>Key presses</th><th>Charachter</th></tr>
	  <tr><td>DEAD_KEY1 followed by u</td><td>&#xf9;</td></tr>
	  <tr><td>DEAD_KEY1+SHIFT followed by u</td><td>&#xfa;</td></tr>
	  <tr><td>DEAD_KEY1+CODE followed by u</td><td>&#xfb;</td></tr>
	  <tr><td>DEAD_KEY1+SHIFT+CODE followed by u</td><td>&#xfc;</td></tr>
  </table>
  <p>In order to use the dead key in openMSX, you must map an appropriate host key to the DEAD_KEY1 of the MSX and
  another one to the CODE key of the MSX with respectively this <code>kbd_deadkey1_host_key</code> setting and the above
  documented <code><a class="internal" href="#kbd_code_kana_host_key">kbd_code_kana_host_key</a></code> setting.</p>
  <p>Note that especially the last key combination (DEAD_KEY1+SHIFT+CODE) can be impossible to enter on some
  host systems; depending on the host operating system, keyboard type and keyboard driver it may be impossible
  for the host system to send a combination of three keys at once to an application like openMSX. Unfortunately
  openMSX or its developers can't do anything about that.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set&nbsp;kbd_deadkey1_host_key</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_deadkey1_host_key&nbsp;PAGEUP</code></td>

      <td>Binds the PAGEUP key on the host keyboard to the 1st dead key</td>
    </tr>
  </table>
  <p>Note that to use for example PAGEUP as 1st dead key you will have to unbind it from the <code>go_back_one_step</code>
   command in the console; by default openMSX has bound the PAGEUP key to the <code>go_back_one_step</code> command and such
   a binding takes precedence over keyboard mappings, so if you want to use PAGEUP as the 1st dead key you will have
   to enter following additional command in the console: <code>unbind PAGEUP</code>.</p>


  <h3><a id="kbd_deadkey2_host_key">kbd_deadkey2_host_key</a></h3>

  <p>Host key that maps to the 2nd dead key. By default Page Up (PAGEUP) key.</p>
  <p>This is only applicable to MSX models that have at least two dead keys, like the Brazilian Hotbit models
  or the Brazilian Gradiente Expert Plus or other Gradiente models with Gradiente basic version 1.1.</p>
  <p>On the Hotbit models, the second dead key can be used to enter accent &#xa8; while on the Gradiente 1.1
  models, the second dead key can be used to enter following accents: <sup>~</sup> ^.</p>
  <p>It can be used in the same manner as the first dead key, explained in previous section.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set&nbsp;kbd_deadkey2_host_key</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_deadkey2_host_key&nbsp;PAGEDOWN</code></td>

      <td>Binds the PAGEDOWN key on the host keyboard to the 2nd dead key</td>
    </tr>
  </table>
  <p>Note that to use for example PAGEUP or PAGEDOWN as a dead key you will have to unbind them from the
   default functions in openMSX using the console; by default openMSX has bound the PAGEUP key to the
   <code>go_back_one_step</code> command and the PAGEDOWN key to the <code>go_forward_one_step</code> command. Such a binding
   takes precedence over keyboard mappings, so if you want to use PAGEUP or PAGEDOWN as the second dead key
   you will have to enter following additional commands in the console: <code>unbind PAGEUP</code> or
  <code>unbind PAGEDOWN</code>.</p>


  <h3><a id="kbd_deadkey3_host_key">kbd_deadkey3_host_key</a></h3>

  <p>Host key that maps to the 3rd dead key. By default Page Down (PAGEDOWN) key.</p>
  <p>This is only applicable to MSX models with at least three dead keys, like the Sharp Hotbit models.</p>
  <p>On the Hotbit models, the third dead key can be used to enter following two accents: <sup>~</sup> ^.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set&nbsp;kbd_deadkey3_host_key</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_deadkey3_host_key&nbsp;RCTRL</code></td>

      <td>Binds the Right CTRL (RCTRL) key on the host keyboard to the 3rd dead key</td>
    </tr>
  </table>
  <p>Note that to use for example PAGEDOWN (default setting!) as the 3rd dead key you will have to unbind
   it from the <code>go_forward_one_step</code> command in openMSX using the console; by default openMSX has bound
   the PAGEUP key to the <code>go_back_one_step</code> command. It is a very useful setting for many openMSX users when
   playing games but unfortunately it conflicts with the default set-up for the third dead key. Such a command
   binding takes precedence over keyboard mappings, so if you want to use PAGEDOWN as the third dead key you
   will have to enter following additional command in the console: <code>unbind PAGEDOWN</code>.</p>


  <h3><a id="kbd_mapping_mode">kbd_mapping_mode</a></h3>

  <p>The keyboard driver can work in two mapping modes; KEY mapping and CHARACTER mapping.</p>

  <dl>
    <dt>KEY mapping:</dt>
    <dd>A key pressed on the host keyboard maps to one specific key on the MSX keyboard. This mode
  is convenient when the host keyboard and the MSX keyboard have the same layout or when working with a program
  that directly reads the keyboard matrix and forces the user to enter a certain key combination that can not
  be auto-generated in the CHARACTER mapping mode.</dd>
    <dt>CHARACTER mapping:</dt>
    <dd>A character entered by the user is mapped to the correct key combination on the MSX to
  enter that character. For example, when the user enters an ! character and openMSX is emulating an 'international'
  MSX model, the keyboard driver will press SHIFT and 1 on the MSX keyboard. This will be done regardless of the key
  or keys that the user pressed on the host keyboard to enter the ! character.<br/>
  This is especially useful when the user has an AZERTY host keyboard and is working on a QWERTY style MSX or
  when he has a US-QWERTY keyboard and is working on a Japanese MSX.<br/>
  Note that special keys (like CAPSLOCK) are mapped directly, just like in the KEY mapping mode.</dd>
  </dl>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set&nbsp;kbd_mapping_mode</code></td>

      <td>Shows the current mode</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_mapping_mode&nbsp;CHARACTER</code></td>

      <td>Set the CHARACTER mapping mode</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_mapping_mode&nbsp;KEY</code></td>

      <td>Set the KEY mapping mode</td>
    </tr>

  </table>

  <h3><a id="kbd_numkeypad_always_enabled">kbd_numkeypad_always_enabled</a></h3>

  <p>Some real MSX computers do not have a numeric keypad. openMSX will ignore
  key presses on the host numeric keypad when emulating such an MSX model.
  With this parameter, you can indicate that even on such MSX models, presses
  on the host numeric keypad must be mapped to the MSX numeric keypad. So, you
  can override accurate behaviour with it, which is the reason that by default,
  this setting is set to 'off'.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set kbd_numkeypad_always_enabled</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set kbd_numkeypad_always_enabled on</code></td>

      <td>Enables numeric keypad, even if the emulated MSX does not have one</td>
    </tr>
  </table>

  <h3><a id="kbd_numkeypad_enter_key">kbd_numkeypad_enter_key</a></h3>

  <p>There is a subtle difference between numeric keypad of MSX computers and
  of most host computers; the MSX computers have a '.' and a ',' on the numeric
  keypad. On the other hand, the host computers have a '.' and an 'ENTER' key
  on the keypad.</p>

  <p>In some respect it is logical that the 'ENTER' key on the host numeric
  keypad is mapped to the 'normal' MSX 'ENTER' key. On the other hand, that
  would make it impossible to enter the ',' on the MSX numeric keypad.
  Therefore, the user can choose whether the host numeric keypad ENTER key
  should be mapped to the MSX numeric keypad ',' (which is the default) or to
  the main 'ENTER' key.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set&nbsp;kbd_numkeypad_enter_key</code></td>

      <td>Shows the current value</td>
    </tr>

    <tr>
      <td><code>set&nbsp;kbd_numkeypad_enter_key&nbsp;ENTER</code></td>

      <td>Maps the keypad enter key to the main 'ENTER' key, instead of the comma key on the MSX keypad</td>
    </tr>
  </table>

  <h3><a id="kbd_trace_key_presses">kbd_trace_key_presses</a></h3>

  <p>Log SDL key code, SDL modifiers and Unicode value for each key that gets
  pressed on the host keyboard on stderr.  Also show Unicode value and
  corresponding MSX key-presses for characters that get 'pasted' into the MSX
  by the console <code><a class="internal" href="#type">type</a></code>
  command. This setting is especially useful when defining unicode keymap
  files, so that you can find out the unicode values belonging to certain
  keys/characters.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set kbd_trace_key_presses</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set kbd_trace_key_presses on</code></td>

      <td>Turn logging of key presses on</td>
    </tr>

  </table>

  <h3><a id="keyjoystick_n_button">keyjoystick&lt;n&gt;.&lt;button&gt;</a></h3>

  <p>Configure the keys of the keyjoysticks. It's likely this will change in the future.</p>

  <p>Valid values for <code>&lt;n&gt;</code>: <code>1</code>, <code>2</code>.</p>

  <p>Valid values for <code>&lt;button&gt;</code>: <code>up</code>, <code>down</code>, <code>left</code>, <code>right</code>, <code>triga</code>, <code>trigb</code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set keyjoystick1.up W</code></td>
    </tr>

    <tr>
      <td><code>set keyjoystick1.down S</code></td>
    </tr>

    <tr>
      <td><code>set keyjoystick1.left A</code></td>
    </tr>

    <tr>
      <td><code>set keyjoystick1.right D</code></td>
    </tr>

    <tr>
      <td><code>set keyjoystick1.triga SPACE</code></td>
    </tr>
  </table>


  <h3><a id="led">led_&lt;name&gt;</a></h3>

  <p>These are read-only settings. Their value reflects the current status of the corresponding LED on the emulated MSX machine. The currently supported LED names are: <code>power</code>, <code>caps</code>, <code>kana</code>, <code>pause</code>, <code>turbo</code> and <code>FDD</code>.</p>

  <p>As for any setting you can use the native <code>trace</code> Tcl command to trigger a callback when the value of these settings changes. (In fact this possibility was the main motivation to make these read-only settings instead of topics of the <code><a class="internal" href="#machine_info">machine_info</a></code> command.)</p>


  <h3><a id="limitsprites">limitsprites</a></h3>

  <p>Controls whether the VDP has a limit on the number of sprites it can display per line. The default is on, because the real VDP has such a limit. You can turn off the limit to reduce sprite flashing in games such as Aleste. Note that some games (Penguin Adventure, among others) make use of this limitation, so they will display incorrectly if the limit is turned off.</p>

  <p>The 5th/9th sprite status flag of the VDP is not influenced by the <code>limitsprites</code> setting: the flag always takes the limit into account.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set limitsprites</code></td>

      <td>Shows the current value</td>
    </tr>

    <tr>
      <td><code>set limitsprites on</code></td>

      <td>Limits number of sprites per line</td>
    </tr>

    <tr>
      <td><code>set limitsprites off</code></td>

      <td>Turns off number of sprites per line limit</td>
    </tr>
  </table>

  <h3><a id="master_volume">master_volume</a></h3>

  <p>Controls the overall openMSX volume. The volume of individual sound devices can be controlled with the <code><a class="internal" href="#soundchip_volume">&lt;soundchip&gt;_volume</a></code> settings.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set master_volume</code></td>

      <td>Shows current setting</td>
    </tr>

    <tr>
      <td><code>set master_volume 50</code></td>

      <td>Sets master volume to 50%</td>
    </tr>
  </table>

  <h3><a id="maxframeskip">maxframeskip</a></h3>

  <p>Sets the maximum amount of frames to skip: show a frame and then skip at most &lt;number&gt; frames. So 0 means show everything (no frame skipping), 1 means show at least every second frame etc.</p>

  <p>Frame skipping is done on demand, as a way to keep the flow of time for the emulated MSX in sync with the flow of real time. You can set limits on the amount of frame skipping with the <code><a class="internal" href="#minframeskip">minframeskip</a></code> and <code>maxframeskip</code> setting.</p>

  <p>In a situation where the number of consecutive frames specified by <code>maxframeskip</code> has been skipped, openMSX will display the next frame, even if that means emulation will start lagging behind real time.</p>

  <p>When <code><a class="internal" href="#throttle">throttle</a></code> is off, the number of skipped frames will be equal to <code>maxframeskip</code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set maxframeskip</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set maxframeskip &lt;number&gt;</code></td>

      <td>Sets the maximum number of consecutive frame skips</td>
    </tr>
  </table>

  <h3><a id="midi-in-readfilename">midi-in-readfilename</a></h3>

  <p>Sets the file from which the MIDI input is read. By default, it is set to <code>/dev/midi</code> when available.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set midi-in-readfilename</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set midi-in-readfilename mymidilog.dat</code></td>

      <td>Read MIDI events from "mymidilog.dat"</td>
    </tr>
  </table>

  <h3><a id="midi-out-logfilename">midi-out-logfilename</a></h3>

  <p>Sets the file to which the MIDI output is logged. By default, it logs to <code>/dev/midi</code> when available.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set midi-out-logfilename</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set midi-out-logfilename mymidilog.dat</code></td>

      <td>Log MIDI events to "mymidilog.dat"</td>
    </tr>
  </table>

  <h3><a id="minframeskip">minframeskip</a></h3>

  <p>Sets the minimum amount of frames to skip: show a frame and then skip at least &lt;number&gt; frames.
  So 0 means no forced frame skipping, 1 means skip at least every second frame etc.</p>

  <p>Frame skipping is done on demand, as a way to keep the flow of time for the emulated MSX in sync with the flow of real time. You can set limits on the amount of frame skipping with the <code>minframeskip</code> and <code><a class="internal" href="#maxframeskip">maxframeskip</a></code> setting.</p>

  <p>The <code>minframeskip</code> setting can be useful if you want to ease the burden on your PC processor, for example for longer battery life on a laptop. It can also be useful if your PC is consistently too slow to run without frame skipping: in such cases video might be smoother with a low but constant frame rate than with a fluctuating frame rate.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set minframeskip</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set minframeskip &lt;number&gt;</code></td>

      <td>Sets the number of frame skips</td>
    </tr>
  </table>

  <h3><a id="mode">mode</a></h3>

  <p>Sets the active mode. A mode is a set of settings (mostly key bindings, but also OSD widgets that are activated) that are most suitable for a certain task. Currently only mode 'normal' and 'tas' exist.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set mode</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set mode tas</code></td>

      <td>Change mode to TAS mode</td>
    </tr>

    <tr>
      <td><code>set mode normal</code></td>

      <td>Set mode back to normal, which is the default (all purpose) mode</td>
    </tr>
  </table>

  <h4>TAS mode</h4>

  <p>So far, the only special mode is the TAS mode, which is made for doing Tool Assisted Speedruns, with TAS widgets and easier ways to save replays. It is still experimental, but already very useful for doing a TAS. This mode enables the following widgets:</p>
  <ul>
    <li>frame counter (can also be toggled with <code>toggle_frame_counter</code>), which shows the VDP (not V9990) frame number on screen</li>
    <li>cursors (can also be toggled with <code>toggle_cursors</code>), shows which keys (important for games) are pressed</li>
  </ul>
  <p>It also (re)enables the reverse bar widget.</p>
  <p>The mode configures the following key bindings, overriding any existing key bindings (note: Mac key bindings are not proper yet...):</p>
  <table>
    <tr> <th>keys (PC)</th>  <th>keys (Mac)</th>         <th>function</th> </tr>
    <tr> <td>F6</td>      <td>(F6)</td>      <td>Load replay from current slot</td></tr>
    <tr> <td>F7</td>      <td>(F7)</td>      <td>Open slot select menu</td></tr>
    <tr> <td>F8</td>      <td>(F8)</td>      <td>Save replay to current slot</td></tr>
    <tr> <td>End</td>     <td>(End)</td>     <td>Advance one frame (<code>advance_frame</code>)</td></tr>
    <tr> <td>ScrollLock</td><td>(ScrollLock)</td><td>Reverse one frame (<code>reverse_frame</code>)</td></tr>
  </table>

  <p>Note that this mode may change in future releases!</p>

  <h3><a id="mute">mute</a></h3>

  <p>Mute/unmute all sound output.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set mute</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set mute on</code></td>

      <td>Mute sound</td>
    </tr>

    <tr>
      <td><code>set mute off</code></td>

      <td>Unmute sound</td>
    </tr>
  </table>

  <h3><a id="noise">noise</a></h3>

  <p>Controls the amount of Gaussian noise that is added to the video output. A small amount of noise can give a more authentic look to the video output on TFTs. Values can be between 0 and 100, where 0 is no noise and 100 is lots of noise.</p>

  <p>This setting is best combined with <code><a class="internal" href="#brightness">brightness</a></code> and <code><a class="internal" href="#contrast">contrast</a></code>: noise creates small random fluctuations in the brightness of pixels. When noise is applied to pure black, it is not possible to make it any darker, so half of the time the noise is ineffective. The same happens with pure white. By setting the <code><a class="internal" href="#brightness">brightness</a></code> slightly above 0 and <code><a class="internal" href="#contrast">contrast</a></code> slightly below 0, you will get a better looking noise effect.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set noise</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set noise 7</code></td>

      <td>Add a moderate amount of noise</td>
    </tr>
  </table>

  <h3><a id="pause">pause</a></h3>

  <p>Pauses the emulation.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set pause</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set pause on</code></td>

      <td>Pauses emulation</td>
    </tr>

    <tr>
      <td><code>set pause off</code></td>

      <td>Unpauses emulation</td>
    </tr>
  </table>

  <div class="note">
    Note: Some video settings cannot be applied to an already rendered frame and will therefore not take effect until openMSX is unpaused.
  </div>

  <h3><a id="pause_on_lost_focus">pause_on_lost_focus</a></h3>

  <p>When this setting is enabled, the emulation will be paused when the
  openMSX window loses focus.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set pause_on_lost_focus</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set pause_on_lost_focus on</code></td>

      <td>Emulation will be paused when the openMSX window loses focus</td>
    </tr>

    <tr>
      <td><code>set pause_on_lost_focus off</code></td>

      <td>Emulation will continue when the openMSX window loses focus (default)</td>
    </tr>
  </table>

  <h3><a id="pointer_hide_delay">pointer_hide_delay</a></h3>

  <p>The amount of seconds before the mouse pointer will be automatically
  hidden after it got shown due to mouse activity. A negative amount means that
  it will never be hidden, an amount of 0 means that it will be always hidden.
  By default the pointer is hidden 1 second after the last mouse activity.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set pointer_hide_delay</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set pointer_hide_delay -1</code></td>

      <td>Never hide the mouse pointer</td>
    </tr>

    <tr>
      <td><code>set pointer_hide_delay 0</code></td>

      <td>Always hide the mouse pointer</td>
    </tr>

    <tr>
      <td><code>set pointer_hide_delay 3.4</code></td>

      <td>Hide the mouse pointer after 3.4 seconds of inactivity</td>
    </tr>
  </table>

  <h3><a id="power">power</a></h3>

  <p>Turn the power of the emulated MSX machine on or off.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set power</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set power on</code></td>

      <td>Turns the MSX machine on (the default)</td>
    </tr>

    <tr>
      <td><code>set power off</code></td>

      <td>Turns the MSX machine off</td>
    </tr>
  </table>

  <h3><a id="printerlogfilename">printerlogfilename</a></h3>

  <p>Sets the file to which the printer logger writes.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set printerlogfilename</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set printerlogfilename myprinterlog.txt</code></td>

      <td>Log to "myprinterlog.txt"</td>
    </tr>
  </table>

  <h3><a id="print-resolution">print-resolution</a></h3>

  <p>Sets the resolution (in dpi) for the emulated dot-matrix printer.</p>

  <p>The emulated printer 'prints' pages as PNG files. This settings determines the resolution of those images.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set print-resolution</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set print-resolution 600</code></td>

      <td>Sets resolution to 600 dpi</td>
    </tr>
  </table>

  <h3><a id="r800_freq">r800_freq / r800_freq_locked</a></h3>

  <p>These two settings control the R800 clock frequency. See <code><a class="internal" href="#z80_freq">z80_freq / z80_freq_locked</a></code> for details.</p>

  <h3><a id="renderer">renderer</a></h3>

  <p>Switch to a different video renderer. See the User's Manual for <a class="external" href="user.html#renderers">a description of the available renderers</a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set renderer</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set renderer &lt;name&gt;</code></td>

      <td>Switches to the given renderer</td>
    </tr>
  </table>

  <h3><a id="renshaturbo">renshaturbo</a></h3>

  <p>Sets the speed of the built-in auto fire on some Japanese MSX models, for example the turboR machines. A value of 0 turns off auto fire, while 100 selects the most rapid auto fire.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set renshaturbo</code></td>

      <td>Shows the current renshaturbo value</td>
    </tr>

    <tr>
      <td><code>set renshaturbo &lt;num&gt;</code></td>

      <td>Sets speed to value &lt;num&gt;</td>
    </tr>
  </table>

  <div class="note">
    Note: This setting is only available if the current MSX machine has hardware Rensha Turbo support.
  </div>

  <h3><a id="resampler">resampler</a></h3>

  <p>Sets the method to resample the sound of sound chips from their native frequency to the <a class="internal" href="#frequency">desired output frequency</a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set resampler</code></td>

      <td>Shows the currently active resampler</td>
    </tr>

    <tr>
      <td><code>set resampler fast</code></td>

      <td>Sets a fast, but low quality resampler. This uses simple linear interpolation, which can result in very audible aliasing effects in some cases. Although this is a relatively low quality algorithm, it's the algorithm that was used in pre-0.6.3 openMSX versions (and most other MSX emulators).</td>
    </tr>

    <tr>
      <td><code>set resampler blip</code></td>

      <td>Sets the <a href="http://slack.net/~ant/libs/audio.html#Blip_Buffer">Blip_Buffer</a> based resampler, which has the best quality per CPU usage ratio (this is the default value).</td>
    </tr>

    <tr>
      <td><code>set resampler hq</code></td>

      <td>Sets the highest quality resampler, but it also takes the most CPU time. It's based on the <a href="http://www.mega-nerd.com/SRC/">libsamplerate</a> algorithm.</td>
    </tr>
  </table>


  <h3><a id="rs232-inputfilename">rs232-inputfilename</a></h3>

  <p>Sets the file from which the RS232-tester reads data. Note that the
  <code>rs232-tester</code> has to be plugged in the <code>msx-rs232</code>
  connector for this to become useful. When plugging the tester, this setting
  needs to point to a valid file.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set rs232-inputfilename</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set rs232-inputfilename myrs232input.txt</code></td>

      <td>Reads from "myrs232input.txt"</td>
    </tr>
  </table>

  <h3><a id="rs232-outputfilename">rs232-outputfilename</a></h3>

  <p>Sets the file to which the RS232-tester writes the data. Note that the
  <code>rs232-tester</code> has to be plugged in the <code>msx-rs232</code>
  connector for this to become useful. When plugging the tester, this setting
  needs to point to a valid file.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set rs232-outputfilename</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set rs232-outputfilename myrs232output.txt</code></td>

      <td>Write to "myrs232output.txt"</td>
    </tr>
  </table>

  <h3><a id="rtcmode">rtcmode</a></h3>

  <p>Sets the Real Time Clock mode. Can be either <code>RealTime</code> or <code>EmuTime</code>.</p>

  <p>In <code>RealTime</code> mode the MSX clock is always synchronized with the host clock, even when for example emulation is paused for a while or when emulation is run at 200% of real speed.</p>

  <p>In <code>EmuTime</code> mode the time is only synchronized with the host clock when openMSX starts. From then on the clock ticks at the same pace as the emulated machine. So when emulation is paused, the clock is paused as well. If emulation is run at 200% speed, the clock also ticks twice as fast.</p>

  <p>In <code>EmuTime</code> mode it's not possible for a MSX program to detect whether it's running on a real or on an emulated machine. That's why this is the default mode. On the other hand the <code>RealTime</code> mode might be better if for example you care that timestamps of files written by the emulated MSX machine are in sync with the host machine time.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set rtcmode</code></td>

      <td>Shows the current mode</td>
    </tr>

    <tr>
      <td><code>set rtcmode EmuTime</code></td>

      <td>Set EmuTime mode (the default)</td>
    </tr>

    <tr>
      <td><code>set rtcmode RealTime</code></td>

      <td>Set RealTime mode</td>
    </tr>
  </table>

  <h3><a id="samples">samples</a></h3>

  <p>Sets the size of the sound mixer buffer. Higher values help against buffer underruns (hickups), but increase the latency of the sound output.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set samples</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set samples 1024</code></td>

      <td>Use a mixing buffer of 1024 samples</td>
    </tr>
  </table>

  <h3><a id="save_settings_on_exit">save_settings_on_exit</a></h3>

  <p>Automatically save the current settings when openMSX exits: execute a <code><a class="internal" href="#save_settings">save_settings</a></code> command on exit.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set save_settings_on_exit</code></td>

      <td>Show current setting</td>
    </tr>

    <tr>
      <td><code>set save_settings_on_exit on</code></td>

      <td>Enable auto save</td>
    </tr>

    <tr>
      <td><code>set save_settings_on_exit off</code></td>

      <td>Disable auto save</td>
    </tr>
  </table>

  <h3><a id="scale_algorithm">scale_algorithm</a></h3>

  <p>Selects the algorithm used to transform MSX pixels to host pixels. The User's Manual contains <a class="external" href="user.html#scalers">more information about scalers</a>.
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set scale_algorithm</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set scale_algorithm simple</code></td>

      <td>Selects the default scale algorithm</td>
    </tr>

    <tr>
      <td><code>set scale_algorithm hq</code></td>

      <td>Selects the HQ2x/3x/4x scale algorithm</td>
    </tr>
  </table>

  <div class="note">
    Note: Not all renderers support all scale algorithms.
  </div>

  <h3><a id="scale_factor">scale_factor</a></h3>

  <p>Selects the scale factor. Scale factor &lt;n&gt; means the typical MSX pixel (MSX resolution 256&times;212) is mapped on &lt;n&gt; by &lt;n&gt; host pixels. For the moment the possible values are 1 to 4. In the future we may support a wider range or even non-integer values. The User's Manual contains <a class="external" href="user.html#scalers">more information about scalers</a>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set scale_factor</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set scale_factor &lt;n&gt;</code></td>

      <td>Sets a new scale factor</td>
    </tr>
  </table>

  <div class="note">
    Note: Not all renderers support all scale factors.
  </div>

  <h3><a id="scanline">scanline</a></h3>

  <p>Sets the amount of scanline effect.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set scanline</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set scanline &lt;value&gt;</code></td>

      <td>Changes the value</td>
    </tr>
  </table>

  <div class="note">
    Note: Some scalers will not render scanlines at all.
  </div>

  <h3><a id="sound_driver">sound_driver</a></h3>

  <p>Select the sound output driver. The list of available sound drivers is platform specific.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set sound_driver sdl</code></td>

      <td>Selects the SDL sound driver</td>
    </tr>

    <tr>
      <td><code>set sound_driver null</code></td>

      <td>Selects the null sound driver (no sound)</td>
    </tr>
  </table>

  <h3><a id="speed">speed</a></h3>

  <p>Sets the emulation speed relative to the speed of a real MSX. Speed 100 means as fast as a real MSX, lower values are slower than real MSX, higher values are faster than real MSX.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set speed</code></td>

      <td>Shows current emulation speed</td>
    </tr>

    <tr>
      <td><code>set speed &lt;num&gt;</code></td>

      <td>Sets new emulation speed</td>
    </tr>
  </table>

  <h3><a id="soundchip_balance">&lt;soundchip&gt;_balance</a></h3>

  <p>Sets the balance (distribution over the left and right channel) for individual sound chips. It replaces the previously available <code>&lt;soundchip&gt;_mode</code> setting. The range is between -100 (totally left) and 100 (totally right).</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_balance</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_balance 0</code></td>

      <td>Plays the output of this chip on both the left and right channel</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_balance -100</code></td>

      <td>Plays the output of this chip on only the left channel</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_balance 75</code></td>

      <td>Plays the output of this chip mostly on the right channel, but also a bit on the left channel</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set PSG_balance</code><br />
    <code>set PSG_balance -100</code><br />
    <code>set FMPAC_balance 0</code>
  </div>

  <h3><a id="soundchip_channel_record">&lt;soundchip&gt;_ch&lt;channel&gt;_record</a></h3>

  <p>Sets the filename to which the sound of an individual channel of
  individual sound chips should be recorded. When this setting is not set, no
  recording takes place and recording starts as soon as the setting is set.
  Normally, you would probably prefer to use the <code><a class="internal"
  href="#record_channels">record_channels</a></code> command to set up channel
  recording instead of this low level setting.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_ch&lt;channel&gt;_record</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_ch&lt;channel&gt;_record filename</code></td>

      <td>Starts recording the sound of the specified chip and channel to the file with name &lt;filename&gt;</td>
    </tr>

  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set SCC_ch1_record</code><br />
    <code>set PSG_ch3_record /tmp/PSG_ch3.wav</code>
  </div>

  <h3><a id="soundchip_channel_mute">&lt;soundchip&gt;_ch&lt;channel&gt;_mute</a></h3>

  <p>Use to mute a specific channel of an individual sound chip.
  Normally, you would probably prefer to use the <code><a class="internal"
  href="#mute_channels">mute_channels</a></code> command to set up channel
  muting instead of this low level setting.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_ch&lt;channel&gt;_mute</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_ch&lt;channel&gt;_mute on</code></td>

      <td>Mutes the sound of the specified channel of the specified chip</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_ch&lt;channel&gt;_mute off</code></td>

      <td>Unmutes the sound of the specified channel of the specified chip</td>
    </tr>

  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set SCC_ch1_mute</code><br />
    <code>set PSG_ch3_mute on</code><br />
    <code>set SCC_ch5_mute off</code>
  </div>

  <h3><a id="soundchip_detune_frequency">&lt;soundchip&gt;_detune_frequency</a></h3>

  <p>Sets the frequency of the detune (a random variation in a sound's frequency) effect. It makes a sound fatter and more natural, as if played by a human being.
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_detune_frequency</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_detune_frequency &lt;num&gt;</code></td>

      <td>Sets new detune frequency in Hz; 1 is minimum, 100 is maximum</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set PSG_detune_frequency</code><br />
    <code>set PSG_detune_frequency 5</code> (default)<br />
  </div>

  <div class="note">
    Note: For now, this setting is only available for the PSG soundchip.
  </div>
  <div class="note">
    Note: It is often more convenient to use the <code><a class="internal" href="#psg_profile">psg_profile</a></code> command.
  </div>

  <h3><a id="soundchip_detune_percent">&lt;soundchip&gt;_detune_percent</a></h3>

  <p>Sets the strength of the detune effect. By default it is 0, which means the effect is switched off.
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_detune_percent</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_detune_percent &lt;num&gt;</code></td>

      <td>Sets new detune strength; 0 is minimum, 10 is maximum</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set PSG_detune_percent</code><br />
    <code>set PSG_detune_percent 0</code> (switched off, default)<br />
    <code>set PSG_detune_percent 0.5</code> (recommended)<br />
  </div>

  <div class="note">
    Note: For now, this setting is only available for the PSG soundchip.
  </div>
  <div class="note">
    Note: It is often more convenient to use the <code><a class="internal" href="#psg_profile">psg_profile</a></code> command.
  </div>

  <h3><a id="soundchip_vibrato_frequency">&lt;soundchip&gt;_vibrato_frequency</a></h3>

  <p>Sets the frequency of the vibrato (a periodic variation in a sound's frequency) effect.
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_vibrato_frequency</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_vibrato_frequency &lt;num&gt;</code></td>

      <td>Sets new vibrato frequency in Hz; 1 is minimum, 10 is maximum</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set PSG_vibrato_frequency</code><br />
    <code>set PSG_vibrato_frequency 5</code> (default)<br />
  </div>

  <div class="note">
    Note: For now, this setting is only available for the PSG soundchip.
  </div>
  <div class="note">
    Note: It is often more convenient to use the <code><a class="internal" href="#psg_profile">psg_profile</a></code> command.
  </div>

  <h3><a id="soundchip_vibrato_percent">&lt;soundchip&gt;_vibrato_percent</a></h3>

  <p>Sets the strength of the vibrato effect. By default it is 0, which means the effect is switched off.
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_vibrato_percent</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_vibrato_percent &lt;num&gt;</code></td>

      <td>Sets new vibrato strength; 0 is minimum, 10 is maximum</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set PSG_vibrato_percent</code><br />
    <code>set PSG_vibrato_percent 0</code> (switched off, default)<br />
    <code>set PSG_vibrato_percent 1</code> (recommended)<br />
  </div>

  <div class="note">
    Note: For now, this setting is only available for the PSG soundchip.
  </div>
  <div class="note">
    Note: It is often more convenient to use the <code><a class="internal" href="#psg_profile">psg_profile</a></code> command.
  </div>

  <h3><a id="soundchip_volume">&lt;soundchip&gt;_volume</a></h3>

  <p>Sets the volume for individual sound chips. The overall volume is controlled by the <code><a class="internal" href="#master_volume">master_volume</a></code> setting.
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set &lt;soundchip&gt;_volume</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set &lt;soundchip&gt;_volume &lt;num&gt;</code></td>

      <td>Sets new volume; 0 is off, 100 is maximum</td>
    </tr>
  </table>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    <code>set PSG_volume</code><br />
    <code>set PSG_volume 60</code><br />
    <code>set "FMPAC_volume" 50</code>
  </div>

  <h3><a id="sync_to_vblank_mode">sync_to_vblank_mode</a></h3>

  <p>Sets the sync to vblank mode. This setting determines whether the SDLGL-PP renderer should synchronizes its frames to your host monitors frame rate (e.g. 60fps).</p>
  <p>The default value is not to synchronize ("<code>immediate</code>"). To synchronize with the host monitor, set the value to <code>sync</code> or <code>adaptive</code>. The former means that the frame will always be only output in sync with the monitor. If the host system is busy it may mean that a frame is too late for the monitor and it will be displayed one frame later. Adaptive sync means that if the frame is too late, it will be drawn anyway, but immediately, not waiting for next monitor frame.</p>
  <p>Use one of the synchronization modes if your MSX is running at about the same frame rate as your monitor (e.g. 60Hz MSX output on a 60Hz host monitor) and you want to avoid (or reduce) tearing, which can be quite visible in smooth horizontal scrolling demos. Keep in mind <a class="internal" href="throttle">throttle mode</a> off works a bit differently in the <code>sync</code> mode (see there). The adaptive sync can help there, but it's not supported on all hardware (when adaptive sync is not supported it falls back to normal sync).</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set sync_to_vblank_mode</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set sync_to_vblank_mode immediate</code></td>

      <td>No synchronization to monitor frame rate: draw immediately (default)</td>
    </tr>

    <tr>
      <td><code>set sync_to_vblank_mode sync</code></td>

      <td>Synchronize to monitor frame rate always</td>
    </tr>

    <tr>
      <td><code>set sync_to_vblank_mode adaptive</code></td>

      <td>Synchronize to monitor frame rate when possible, otherwise draw immediately. Not available on all host hardware.</td>
    </tr>
  </table>

  <h3><a id="throttle">throttle</a></h3>

  <p>Sets throttle mode. In throttle mode the emulator tries to run at the specified speed relative to a real MSX (see <a class="internal" href="#speed">speed</a> command). When throttling is turned off the emulator runs as fast as possible. The speed may be limited to the framerate of your monitor (e.g. 60fps) if you have set <a class="internal" href="sync_to_vblank_mode">sync to vblank_mode</a> to <code>sync</code>, when using the (default) SDLGL-PP renderer. In that case, to increase the speed, set the <a class="internal" href="#maxframeskip">maxframeskip</a> setting to a high value (e.g. 100).</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set throttle</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set throttle on</code></td>

      <td>Turn throttle mode on (normal operation)</td>
    </tr>

    <tr>
      <td><code>set throttle off</code></td>

      <td>Turn throttle mode off (fast forward)</td>
    </tr>
  </table>

  <h3><a id="too_fast_vram_access">too_fast_vram_access</a></h3>

  <p>How should software that accesses the VDP-VRAM too fast be emulated?
  Most existing MSX software should not access VRAM too fast, and in that case
  this setting has no effect. But you may want to change it when you e.g.
  emulate an overclocked Z80 (see <a class="internal" href="#z80_freq">
  z80_freq</a>).</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set too_fast_vram_access</code></td>
      <td>Shows the current setting</td>
    </tr>
    <tr>
      <td><code>set too_fast_vram_access real</code></td>
      <td>Accessing the VRAM too fast results in dropped VRAM accesses, just like on a real machine.</td>
    </tr>
    <tr>
      <td><code>set too_fast_vram_access ignore</code></td>
      <td>All VRAM accesses are executed, so timing of VRAM access is ignored.</td>
    </tr>
  </table>


  <h3><a id="too_fast_vram_access_callback">too_fast_vram_access_callback</a></h3>

  <p>Selects the Tcl procedure to be called when a too-fast-VRAM-access (read
  or write) has been detected. This is useful for debugging MSX programs that
  show certain kinds of VRAM corruption, especially on MSX1.</p>

  <p>By default this setting is empty, which means that nothing is done when a
  too-fast-VRAM-access is detected. We ship a few example procedures called
  <code>warn_too_fast_vram_access</code> and
  <code>debug_too_fast_vram_access</code> which respectively print a warning or
  break CPU emulation when this condition occurs. You can find the source code
  for these procedures in <code>scripts/callbackprocs.tcl</code>. Feel free to
  write your own procedure that does exactly what you need.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set VDP.too_fast_vram_access_callback</code></td>
      <td>Shows the currently installed callback</td>
    </tr>
    <tr>
      <td><code>set VDP.too_fast_vram_access_callback warn_too_fast_vram_access</code></td>
      <td>Print warning when too fast VRAM access is detected</td>
    </tr>
    <tr>
      <td><code>set VDP.too_fast_vram_access_callback debug_too_fast_vram_access</code></td>
      <td>Print warning and also break emulation right after the Z80 instruction that triggered this callback</td>
    </tr>
    <tr>
      <td><code>set VDP.too_fast_vram_access_callback my_custom_callback_handler</code></td>
      <td>Install a custom callback handler</td>
    </tr>
    <tr>
      <td><code>set VDP.too_fast_vram_access_callback ""</code></td>
      <td>Remove any installed callback handler</td>
    </tr>
  </table>


  <h3><a id="touchpad_transform_matrix">touchpad_transform_matrix</a></h3>

  <p>Specify a 2&times;3 transformation matrix that maps host mouse coordinates
  to MSX touchpad coordinates.
  To get the following coordinate transformation:</p>
  <pre>
        | a b c |   | host-X |   | touchpad-X |
        | d e f | &times; | host-Y | = | touchpad-Y |
                    |    1   |
  </pre>
  <p>Use this command:</p>
  <pre>
        set touchpad_transform_matrix {{a b c} {d e f}}
  </pre>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set touchpad_transform_matrix</code></td>
      <td>Shows the current value</td>
    </tr>
    <tr>
      <td><code>set touchpad_transform_matrix {{256 0 0} {0 256 0}}</code></td>
      <td>This is the default, map the full host window to 256&times;256 touchpad input</td>
    </tr>
    <tr>
      <td><code>set touchpad_transform_matrix {{320 0 -64} {0 240 -14}}</code></td>
      <td>Attempt to map touch coordinates to corresponding MSX pixel coordinates.</td>
    </tr>
  </table>

<!-- TODO write Tcl scripts to setup this matrix
  <div class="note">
    Note: It is often more convenient to use the <code><a class="internal" href="#monitor_type">monitor_type</a></code> command.
  </div>
-->


  <h3><a id="turborpause">turborpause</a></h3>

  <p>Controls the pause key on a MSX turboR machine.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set turborpause</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set turborpause on</code></td>

      <td>Activate the pause key</td>
    </tr>

    <tr>
      <td><code>set turborpause off</code></td>

      <td>Deactivate the pause key</td>
    </tr>
  </table>

  <div class="note">
    Note: If you use this setting often, it may be useful to bind it to a key on your PC keyboard. See the <code><a class="internal" href="#bind">bind</a></code> and <code><a class="internal" href="#toggle">toggle</a></code> commands.
  </div>


  <h3><a id="umr_callback">umr_callback</a></h3>

  <p>Selects the Tcl procedure to be called when an Uninitialized Memory Read has been detected. This is useful for debugging MSX programs: uninitialized memory is not guaranteed to have any particular value, so reading it is most likely a bug.</p>

  <p>By default this setting is empty, which means that nothing is done when an Uninitialized Memory Read is detected. We ship a useful procedure called <code>umrcallback</code> which logs all UMRs. You can activate it with <code>set umr_callback umrcallback</code>. You can find the source code for this procedure in <code>scripts/callbackprocs.tcl</code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set umr_callback</code></td>
      <td>Shows the current UMR callback setting</td>
    </tr>
    <tr>
      <td><code>set umr_callback umrcallback</code></td>
      <td>Sets callback proc to <code>umrcallback</code></td>
    </tr>
  </table>


  <h3><a id="vdpcmdinprogress_callback">vdpcmdinprogress_callback</a></h3>

  <p>Selects the Tcl procedure to be called when a write to a VDP command engine register is detected while there is still a VDP command in progress. Often this is an indication of a bug in the running MSX program. Note that writes to VDP register R#44 with a command in progress are normal behaviour, so the callback is not triggered for such writes.</p>

  <p>By default this setting is empty, which means that nothing is done when a suspicious VDP command engine write is detected. We ship an example proc called <code>vdpcmdinprogresscallback</code> which simply logs all occurrences. You can activate it with <code>set vdpcmdinprogress_callback vdpcmdinprogresscallback</code>. You can find the source code for this proc in <code>scripts/callbackprocs.tcl</code>. Feel free to write your own proc that does exactly what you need. For example it might be a good idea to execute <code>debug break</code> in your callback, so that you can easily examine what code triggered this write.</p>

  <div class="subsectiontitle">
    usage:
  </div>
  <table>
    <tr>
      <td><code>set vdpcmdinprogress_callback</code></td>
      <td>Shows the current value. Default is "" (meaning no action)</td>
    </tr>
    <tr>
      <td><code>set vdpcmdinprogress_callback vdpcmdinprogresscallback</code></td>
      <td>Sets callback to <code>vdpcmdinprogresscallback</code></td>
    </tr>
  </table>


  <h3><a id="vdpcmdtrace">vdpcmdtrace</a></h3>

  <p>Enable/disable VDP command tracing. When enabled, every VDP command is logged on stdout. This is useful when debugging MSX programs that use the VDP command engine.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set vdpcmdtrace</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set vdpcmdtrace on</code></td>

      <td>Enables VDP command tracing</td>
    </tr>

    <tr>
      <td><code>set vdpcmdtrace off</code></td>

      <td>Disables VDP command tracing</td>
    </tr>
  </table>

  <h3><a id="videosource">videosource</a></h3>

  <p>Switch between video sources: <code>MSX</code> (V99x8, default when no
    Video 9000 is available), <code>GFX9000</code> (V9990),
    <code>Video9000</code> (V9990 superimposed on top of V99x8, default if
    available) and <code>Laserdisc</code> (for Palcom machines). There can be
    even more video sources, e.g. due to cartridges with a built in VDP like
    the Neos MA-20(V).
  </p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set videosource</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set videosource MSX</code></td>

      <td>Switch to normal MSX screen</td>
    </tr>

    <tr>
      <td><code>set videosource GFX9000</code></td>

      <td>Switch to GFX9000 screen</td>
    </tr>
  </table>

  <div class="note">
    Note: This setting is only available if multiple videosources are present.
  </div>

  <h3><a id="v9990cmdtrace">v9990cmdtrace</a></h3>

  <p>Enable/disable V9990 command tracing. This is the V9990 equivalent of <code><a class="internal" href="#vdpcmdtrace">vdpcmdtrace</a></code>.</p>

  <div class="subsectiontitle">
    usage:
  </div>

  <table>
    <tr>
      <td><code>set v9990cmdtrace</code></td>

      <td>Shows the current setting</td>
    </tr>

    <tr>
      <td><code>set v9990cmdtrace on</code></td>

      <td>Enables V9990 command tracing</td>
    </tr>

    <tr>
      <td><code>set v9990cmdtrace off</code></td>

      <td>Disables V9990 command tracing</td>
    </tr>
  </table>

  <div class="note">
   Note: This setting is only available if the <code>gfx9000</code> or
   <code>video9000</code> extension is present.
  </div>

  <h3><a id="z80_freq">z80_freq / z80_freq_locked</a></h3>

  <p>These two settings control the Z80 clock frequency. When <code>z80_freq_locked</code> is true the emulated Z80 runs at the normal 3.579545 MHz (or optionally 5.369318 MHz on some machines). When <code>z80_freq_locked</code> is false the value of <code>z80_freq</code> is taken as the Z80 clock frequency.</p>

  <p>WARNING: be careful when changing these settings. When saving the settings in which a different clock is activated, this will be applied for all machines, as these are global settings. Some software (like demos) may stop working properly with a changed CPU clock frequency. Specifically, using a value (just) below the normal value may cause problems loading CAS images, as these are converted to a high baud rate WAV file internally and when the MSX becomes slower it cannot handle that high baud rate.</p>

  <div class="subsectiontitle">
    examples:
  </div>

  <div class="examples">
    Overclock Z80 to 14 MHz:<br />
    <code>set z80_freq 14318180</code><br />
    <code>set z80_freq_locked false</code><br />
    <br />
    F8 switches between 3.5 MHz and 7 MHz:<br />
    <code>set Z80_freq 7159090</code><br />
    <code>bind F8 "toggle z80_freq_locked"</code><br />
  </div>

  <h3><a id="othersettings">other settings</a></h3>

  <p>Like with the commands, there are also some specialized settings, for which we only list a very brief overview. As always execute "<code>help setting &lt;setting-name&gt;</code>" to get a more detailed description of the setting.</p>

  <table>
    <tr>
      <td><code>fast_cas_load_hack_enabled</code></td>
      <td>Enable a hack that lets you quickly load CAS files, without having openMSX convert them to WAV</td>
    </tr>
  </table>

  <p>The source code of all these scripts is located in <code>share/scripts</code> directory. Feel free to inspect these scripts and modify them to suit your needs.</p>

 </body>
</html>
